同学问这道题的做法,然后随便就……
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int n; struct node { int sum,next; string s; }; node edge[10005]; int head[1000],sum=0; int hash(string sum) { int l=0; int r=sum.size()-1; int m=(l+r)/2; return int(sum[l]+sum[r]+sum[m]); } void push(string s) { int v=hash(s); for(int i=head[v];i!=-1;i=edge[i].next) if(edge[i].s==s) return; edge[++sum].sum=v; edge[sum].s=s; edge[sum].next=head[v]; head[v]=sum; return; } int main() { memset(head,-1,sizeof(head)); scanf("%d",&n); for(int i=1;i<=n;++i) { string sdf; cin>>sdf; push(sdf); } printf("%d",sum); return 0; }
感觉hash函数并不需要很复杂……