首页 > 代码库 > BZOJ 3555 Ctsc2014 企鹅QQ Hash
BZOJ 3555 Ctsc2014 企鹅QQ Hash
题目大意:给定n个不相同的字符串,问有多少对字符串只差一个字母
枚举每个只差一个字母的位置,取除这个字符以外的哈希值判断即可
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 30300 #define BASE 149 using namespace std; typedef unsigned long long ll; int n,k,ans; ll sum[M][210],power[210]; char s[210]; ll a[M]; void Calculate(int pos) { int i; for(i=1;i<=n;i++) a[i]=sum[i][k]-sum[i][pos]*power[k-pos]+sum[i][pos-1]*power[k-pos+1]; sort(a+1,a+n+1); int cnt; for(i=1;i<=n;i++) { if(i==1||a[i]!=a[i-1]) cnt=-1; cnt++; ans+=cnt; } } int main() { int i,j; cin>>n>>k; scanf("%*d"); power[0]=1; for(i=1;i<210;i++) power[i]=power[i-1]*BASE; for(i=1;i<=n;i++) { scanf("%s",s+1); for(j=1;j<=k;j++) sum[i][j]=sum[i][j-1]*BASE+s[j]; } for(i=1;i<=k;i++) Calculate(i); cout<<ans<<endl; }
BZOJ 3555 Ctsc2014 企鹅QQ Hash
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。