
字符串hash
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
bzoj 3207 花神的嘲讽计划Ⅰ hash 莫队
hash每个长度为k的串,莫队跑一遍就行了。#include <bits/stdc++.h>using namespace std;#define N 210000#define seed 23333333#define ull unsigned long longint n,m,K,sz,cnt;int a[N],ans[N],pos[N];ull has[N],pw[N],v[N]原创 2016-10-25 11:18:50 · 291 阅读 · 0 评论 -
bzoj 1692 二分+hash
如果当前两边字符不同,那么选小的那边。否则二分+hash找到第一个不同的位置,如果左边小输左边,否则输右边。 逗比输出。。。#include <bits/stdc++.h>using namespace std;#define ull unsigned long long #define N 31000#define seed 133int n;char s[N],s1[11],ans原创 2016-10-18 18:36:55 · 569 阅读 · 0 评论 -
bzoj 2803 [Poi2012]Prefixuffix hash
设满足条件的两段为: 1~j , n-j+1~n。其中1~i和n-i+1~n相等,i+1~j和n-j+1~n-i相等。 那么从大到小枚举i,如果1~i和n-i+1~n相等,那么就是求最大的j使 i+1~i+j和n-i-j+1~n-i+1相等。设此时的j为f[i]。那么有f[i]<=f[i+1]+2。那么类似后缀数组求h的过程求一下f就行了。#include <bits/stdc++.h>usi原创 2016-11-16 14:51:22 · 269 阅读 · 0 评论 -
bzoj 2795 [Poi2012]A Horrible Poem hash
如果直接枚举长度的约数,hash判断s[l~r-len]和s[l+len~r]是否相等是O(qn√)O(q\sqrt{n}) 的。 由于最后答案的段数对于每个质因子是独立的,所以先把素数筛出来,然后判断每个质因子是否可行,如果可行就将答案的段数乘上这个质因子,就可以把复杂度除log#include <bits/stdc++.h>using namespace std;#define N 510原创 2016-11-15 14:29:47 · 287 阅读 · 0 评论