题目大意:给定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; }
原文地址:http://blog.csdn.net/popoqqq/article/details/40860177