bzoj3555: [Ctsc2014]企鹅QQ hash
2017-10-23 08:25
417 查看
题意:给出n个相同长度的子串,问有多少对只有一个位置不同。
hash练手题。。算出前缀后缀的hash以后,枚举哪一个位置不同,然后统计就好了。
注意不能%,或者质数太小都会冲突。
hash练手题。。算出前缀后缀的hash以后,枚举哪一个位置不同,然后统计就好了。
注意不能%,或者质数太小都会冲突。
#include<cstdio> #include<cstring> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=30005; const int M=205; const int mo1=23333333; const int mo2=1e9+7; int n,m,k; typedef long long ll; ll a[N],pre[N][M],suf[N][M],ans; char s[N][M]; inline void cal(int x) { fo(i,1,m) pre[x][i]=(pre[x][i-1]*211+s[x][i]); fd(i,m,1) suf[x][i]=(suf[x][i+1]*179+s[x][i]); } int main() { scanf("%d%d%d",&n,&m,&k); fo(i,1,n) { scanf("%s",s[i]+1); cal(i); } fo(j,1,m) { fo(i,1,n) { a[i]=(pre[i][j-1]*311+suf[i][j+1]*317); } sort(a+1,a+1+n); int cnt=1; fo(i,1,n) { if (a[i]==a[i-1])ans+=cnt,cnt++; else cnt=1; } } printf("%lld\n",ans); }
相关文章推荐
- 【BZOJ 3555】【CTSC 2014】企鹅QQ【hash】
- BZOJ 3555 [CTSC2014] 企鹅QQ Hash
- 【BZOJ3555】[Ctsc2014]企鹅QQ【Hash】
- 【BZOJ3555】[Ctsc2014]企鹅QQ hash
- BZOJ3555: [Ctsc2014]企鹅QQ(字符串hash)
- bzoj 3555: [Ctsc2014]企鹅QQ (hash)
- [bzoj3555][Ctsc2014]企鹅QQ(hash)
- BZOJ 3555 Ctsc2014 企鹅QQ Hash
- BZOJ 3555: [Ctsc2014]企鹅QQ hash
- bzoj3555 [Ctsc2014]企鹅QQ(hash+枚举)
- BZOJ3555 [Ctsc2014]企鹅QQ 【hash】
- 【bzoj3555】[Ctsc2014]企鹅QQ 字符串hash
- 【BZOJ 3555】 [Ctsc2014]企鹅QQ|hash
- BZOJ 3555: [Ctsc2014]企鹅QQ( hash )
- BZOJ 3555 [ctsc 2014] 企鹅QQ (hash)
- bzoj 3555: [Ctsc2014]企鹅QQ hash
- BZOJ 3555 CTSC 2014 企鹅QQ Hash
- BZOJ 3555: [Ctsc2014]企鹅QQ Hash乱搞
- [BZOJ3555] [Ctsc2014]企鹅QQ(Hash)
- bzoj 3555: [Ctsc2014]企鹅QQ hash