标签:
题意:
输入一篇文章,输出出现最多的10个单词
不包括old里的已有单词
出现次数相同按字典序大小
简单模拟,map记录个数
没有什么坑点
然后sort一下
用string 可以直接比较字典序大小
#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> #include<map> #include<math.h> using namespace std; char s[205],m[]={"</article>"}; struct node { string a; int v; }p[150005]; bool cmp(node a,node b) { if(a.v==b.v) return a.a<b.a; return a.v>b.v; } int main() { int i,j,n; int T; scanf("%d",&T); while(T--) { scanf("%s",s); map<string,int> f; while(scanf("%s",s)) { int l=strlen(s); for(i=0;i<l;i++) { if(s[i]>=‘A‘&&s[i]<=‘Z‘) s[i]+=32; } if(s[0]==‘<‘) break;f[s]=-1; } scanf("%s",s); int cnt=0; while(scanf("%s",s)) { int l=strlen(s); if(l==10) { for(i=0;i<l;i++) { if(s[i]==m[i]) continue; break; } if(i==10) break; } string tp=""; for(i=0;i<l;i++) { if(s[i]>=‘A‘&&s[i]<=‘Z‘) s[i]+=32; if(s[i]>=‘a‘&&s[i]<=‘z‘) tp+=s[i]; else { if(tp=="") continue; if(f[tp]==0) { f[tp]=++cnt; p[cnt].a=tp; p[cnt].v=1; } else p[f[tp]].v++; tp=""; } } if(tp=="") continue; if(f[tp]==0) { f[tp]=++cnt; p[cnt].a=tp; p[cnt].v=1; } else p[f[tp]].v++; } sort(p+1,p+1+cnt,cmp); for(i=1;i<=10&&i<=cnt;i++) cout<<p[i].a<<endl; cout<<endl; } return 0; }
HDU计算机学院大学生程序设计竞赛(2015’12)1008 Study Words
标签:
原文地址:http://www.cnblogs.com/Woo95/p/5078318.html