[CTSC2014]企鹅QQ
Posted alecli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CTSC2014]企鹅QQ相关的知识,希望对你有一定的参考价值。
题意
思考
这其实是一道哈希模板题,题目定义“相似串”:两字符串只有一处不同。
很容易想到哈希,我们枚举每一位,将该位的哈希值删除后重新比较两串即可,主要实现也很简单,主要类比进制就好了。((ps) :我再也不相信单模数哈希了),如何记录答案?肯定不能 (n^2) 记录啦,将去掉某位的哈希值排序,再顺着扫一遍即可,具体细节见代码
代码
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll base = 131;
char s[30030][205];
ll S, ans, B[30030], H[30030][205], n, len, cnt, tmp[30030];
void init(){
B[0] = 1;
for(int i=1; i<=len; i++) B[i] = (B[i-1] * base);
for(int i=1; i<=n; i++){
for(int j=1; j<=len; j++){
H[i][j] = (H[i][j-1] * base + s[i][j]);
}
}
}
int main(){
cin >> n >> len >> S;
for(int i=1; i<=n; i++){
cin >> s[i] + 1;
}
init();
for(int j=1; j<=len; j++){
for(int i=1; i<=n; i++){
tmp[i] = H[i][j-1] * B[len-j] + H[i][len] - H[i][j] * B[len-j];
}
sort(tmp+1, tmp+n+1);
int sum = 1;
for(int i=1; i<=n; i++){
if(tmp[i] == tmp[i-1]) ans += sum, sum ++;
else sum = 1;
}
}
cout << ans;
return 0;
}
总结
以后自然溢出/最好双哈希
以上是关于[CTSC2014]企鹅QQ的主要内容,如果未能解决你的问题,请参考以下文章