本文共 638 字,大约阅读时间需要 2 分钟。
这道题是字符串。
我们把给每个字符串一个地址,
地址重复就往后取地址。
如果找到空地址,证明字符串没有出现过。
找到有相同字符串的地址,证明字符串是重复出现过的。
这样就可以解决这道题了。
#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>using namespace std;const int P=13331;string s,h[20010];int n,ans;bool hs(string s){ int sum=0,j=0; for(int i=0; i<=s.size()-1; i++) sum=(sum*123+(s[i]-48))%P; while(h[(sum+j)%P]!=""&&h[(sum+j)%P]!=s) j++; if(h[(sum+j)%P]=="") { h[(sum+j)%P]=s; return 0; } return 1;}int main(){ //freopen("P3370_2.in","r",stdin); cin>>n; for(int i=1; i<=n; i++) { cin>>s; if(hs(s)==0) ans++; } cout<<ans; return 0;}
转载地址:http://rale.baihongyu.com/