給定一些結構體,結構體有value值和key值一一對應,value可用{}巢狀key和value對。q次詢問,輸出每個key值對應的value值。
用遞迴將key值對映成乙個hash值,這個思路個人覺得很像在p(=131)進製下把乙個字元當一位,乙個字串當乙個p進製的數,因為ascii碼範圍在128以內,所以明顯hash只不會產生衝突。
用map對映每個key的value起始終止位置,預處理完了查詢就很簡單了。
然後預處理出所有具體key值(巢狀的之間加 『.』 字元)的hash,map對映出hash的對應子串的左右座標。
再模擬請求輸出。
#include
#include
#include
#include
using
namespace
std;
const
int maxn=500007;
char s[maxn],t[maxn];
int q,mv,cas;
typedef
unsigned
long
long ull;
mapint,int> > mp;
const ull p=131;
void pre (ull hash)')')
return ;
hash=tmp;
while (s[mv]!=':')
left=++mv;
if (s[mv]=='')
mv++;
mp[hash]=make_pair(left,mv);
// cout}
}void work ()
// coutprintf ("\n");
}else
printf("error!\n");
}}int main ()
}
Hash 字串 字串雜湊
luo gu luogu luogup 3370 p3370 p337 0如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母 請求出n個字串中共有多少個不同的字串。第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字...
白兔的字串 字串hash
原題 一道典型的字串hash,至於hash,這裡講的非常好。一開始用map函式一直超時,後來改用unordered map就過了,至於這2個map的區別,這裡講的挺清楚的。之後去查了一下其它方法,發現還有一種方法是手寫map函式 強 指明 大佬 unordered map是跑了600ms,重寫跑了1...
字串 字串雜湊hash演算法
以洛谷p3370為引子引入吧 雜湊其實是所有字串操作中,筆者認為最簡單的操作了 except輸入輸出qwq 雜湊的過程,其實可以看作對乙個串的單向加密過程,並且需要保證所加的密不能高概率重複 就像不能讓隔壁老王輕易地用它家的鑰匙開啟你家門一樣qwq 通過這種方式來替代一些很費時間的操作。比如,最常見...