本文共 997 字,大约阅读时间需要 3 分钟。
第一问hash求解(素数一定要出乎意料,不然毒瘤出题人卡)
#include#include #include #include using namespace std;int uu[1001],m,o[100001],uo[100001][2],ls,yu[133333],n,ans1,ans2=0x7fffffff;int book[133333];string h;int f(string x){ int yy=0; for (int i=1;i<=x.size();i++) yy=(yy*97+x[i-1])%133331; return yy;}int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) { cin>>h; uu[i]=f(h); book[uu[i]]=1; } scanf("%d",&m); for (int i=1;i<=m;i++) { cin>>h; o[i]=f(h); if (book[o[i]]==1) { book[o[i]]=-1; ans1++; } } printf("%d\n",ans1); if (ans1==0) { printf("0"); return 0; }//由于代码对ans1进行判断是否=0的操作,所以我们特判0,0情况 int l=1; int r=1; while (20!=0) { if (ans1==0) { while (book[o[l]]==0) l++; if (l>m) break; ans2=min(r-l,ans2); if (yu[o[l]]==1) ans1++; yu[o[l]]--,l++; } else { if (r>m) break; if (book[o[r]]) { if (yu[o[r]]==0) ans1--; yu[o[r]]++; } r++; } } printf("%d",ans2); return 0;}
转载地址:http://kcye.baihongyu.com/