image
学习董晓老师的:
image
image

typedef unsigned long long ull;
const int N=1e4+5;
using namespace std;
const int P=13331;
ull p[N],h[N];//此题用不到h[n],对于单个字符串h【N】有用处
ull ans[N];
//p[i]=P^i,h[i]=s[1~i]的哈希值;
int n,m;
ull init(int len,string s){
	p[0]=1,h[0]=0;
	for(int i=1;i<=len;i++){
		h[i]=h[i-1]*P+s[i-1];
	}
	return h[len];
}
ull get(int l,int r){
	return h[r]-h[l-1]*p[r-l+1];//取出前缀的字符串哈希,此题不用
}
//判断两字串是否相同
bool substr(int l1,int r1,int l2,int r2){
	return get(l1,r1)==get(l2,r2);
}
int main() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		ans[i]=init(s.length(),s);		
	}
	sort(ans+1,ans+n+1);
	ull res=1;
	for(int i=1;i<=n-1;i++){
		if(ans[i]!=ans[i+1]){
			res++;
		}
	}
	cout<<res<<endl;
	return 0;
}

注意为什么没取模,因为ull的特性,无符号整型,超过大小自动取模所有必要。