牛客 Hash 思維 進製轉換

2021-10-02 19:33:30 字數 1109 閱讀 7730

題目大意:給出乙個長度為 6 的字串 s ,再給出模數 mod,現在規定雜湊值為如下運算:

const int len = 6;

int mod;

int hash(char str)

return res;

}

問是否存在乙個字串,字典序大於 s 且雜湊值相等

題目分析:讀完題後陷入思維定式好一段時間,固然以為雜湊值是需要有字串才行,於是想到用dfs暴力列舉子串然後全排列,一開始沒計算好時間複雜度,以為是可行的,搗鼓了半天dfs,最後認真算了一遍列舉的複雜度為 26^6*a(6)*6,其中26^6是列舉字串所需要花費的時間,a(6)是對長度為 6 的字串全排列所需要的時間,也就是 720 ,還有常數 6 是需要計算字串的雜湊值,先不管別的,26^6就已經3e8了,顯然暴力是不可行的

於是就敞開思維開始亂猜了,發現如果想要找到滿足題目要求的字串,只需將當前字串向後 mod 個單位就好了,稍微一轉換,會發現其實每一位字元代表的區間分別為[ 0 , 26 ),[ 26 , 26^2 ),[ 26^2 , 26^3 ) 以此類推,進一步再轉換一下,會發現這其實不就是將字串 s 當成乙個 26 進製的數字來計算,到此為止豁然開朗,直接模擬即可

**:

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

const int inf=0x3f3f3f3f;

const int n=1e5+100;

int q_pow(int a,int b)

return ans;}

int main()

string ans;

for(int i=0;i<6;i++)

reverse(ans.begin(),ans.end());

cout<}

return 0;

}

進製轉換 牛客

將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 每行輸出對應的二進位制數。示例1 013 8 0111 1000 這是一道關於大數整數的處理,對於長度為30的整數,...

牛客網 進製轉換

題目描述 給定乙個十進位制數m,以及需要轉換的進製數n。將十進位制數m轉化為n進製數 輸入描述 輸入為一行,m 32位整數 n 2 n 16 以空格隔開。輸出描述 為每個測試例項輸出轉換後的數,每個輸出佔一行。如果n大於9,則對應的數字規則參考16進製制 比如,10用a表示,等等 分析 較簡單,主要...

牛客題 進製轉換

給定乙個十進位制數m,以及需要轉換的進製數n。將十進位制數m轉化為n進製數 主要考慮負數情況和10進製以上怎麼轉換,進製轉換我們知道就是將m對n進行取餘,得到的結果就是低位的值,之後m m n 2進製用0,1表示 8進製由0 7表示 10進製是0 9表示,十六進製制由 0123456789abcde...