题目大意
求n个字符串不同的个数
题解
hash模板 1LL强制转换成long long
代码
#include<iostream> #include<algorithm> #include<cstdio> #include<set> #include<cstring> using namespace std; //#define mod 1e9+7//不能这样宏定义 const int mod=1e9+7; #define D 131 #define M 2333+7 long long n,g[M],f[M]; string s; set<long long>t; void predeal(int x){ //memset(f,0,sizeof(f)); //memset(g,0,sizeof(g)); f[0]=s[0]; for(int i=1;i<=x;i++) f[i]=(1LL*f[i-1]*D+s[i-1])%mod; g[0]=1; for(int i=1;i<=x;i++) g[i]=1ll*g[i-1]*D%mod; } int Hash(int l,int r){ long long a=f[r],b=1LL*f[l-1]*g[r-l+1]%mod; return (a-b+mod)%mod; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++){ cin>>s; long long len=s.length(); predeal(len); long long k=Hash(1,len); t.insert(k); } printf("%lld ",t.size()); return 0; }