標籤:
題意:
輸入一篇文章,輸出出現最多的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