计算机学院大学生程序设计竞赛(2015’12) 1008 Study Words
#include<cstdio> #include<cstring> #include<map> #include<string> #include<algorithm> using namespace std; int T; char s[100+10]; char r[100+10]; map<string,int>m; struct dan { char s[100+10]; int num; }d[1000000+10]; int sum; int tot; bool cmp(const dan&a,const dan&b) { if(a.num==b.num) return strcmp(a.s,b.s)<0; return a.num>b.num; } //转小写 void F() { for(int i=0;s[i];i++) if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]-'A'+'a'; } void work() { int len=strlen(s); tot=0; for(int i=0;i<=len;i++) { if(s[i]>='a'&&s[i]<='z') r[tot++]=s[i]; else { r[tot]='\0'; if(strlen(r)>0) m[r]=-1; tot=0; } } } void work2() { int len=strlen(s); tot=0; for(int i=0;i<=len;i++) { if(s[i]>='a'&&s[i]<='z') r[tot++]=s[i]; else { r[tot]='\0'; if(strlen(r)>0) { if(m[r]!=-1) { if(m[r]==0) strcpy(d[sum++].s,r); m[r]++; } } tot=0; } } } int main() { scanf("%d",&T); while(T--) { int flag=0; m.clear(); sum=0; while(1) { scanf("%s",s); if(strcmp(s,"<oldwords>")==0) {flag=1;continue;} if(strcmp(s,"</oldwords>")==0) {flag=2;continue;} if(strcmp(s,"<article>")==0) {flag=3;continue;} if(strcmp(s,"</article>")==0) break; if(flag==1) { F(); work(); } if(flag==3) { F(); work2(); } } for(int i=0;i<sum;i++) d[i].num=m[d[i].s]; sort(d,d+sum,cmp); for(int i=0;i<min(10,sum);i++) printf("%s\n",d[i].s); printf("\n"); } return 0; }