1. 程式人生 > >第十屆河南省acm省賽 諜報分析

第十屆河南省acm省賽 諜報分析

“八一三”淞滬抗戰爆發後,***幾次準備去上海前線視察和指揮作戰。但都因為寧滬之間的鐵路和公路遭到了敵軍的嚴密封鎖,狂轟濫炸,一直未能成行。

***特科組織,其主要任務是保衛***的安全,瞭解和掌握敵方的動向。經過一段時間的監聽,諜報組獲取了敵方若干份密報,經過分析,發現密文中頻繁出現一些單詞,情報人員試圖從單詞出現的次數中,推出敵軍的行動計劃。

請你程式設計,快速統計出頻率高的前十個單詞。

輸入

密文是由英語單詞(小寫字母)組成,有若干段。單詞之間由一個或多個空格分開,自然段之後可以用一個“,”或“。”表示結束。整個內容的單詞數量不超過10000,不同的單詞個數不超過500.

輸出

輸出佔10行,每行一個單詞及出現的次數,中間一個空格。要求按頻率降序輸出,出現次數相同的單詞,按字典序輸出。

樣例輸入

shooting is at shanghai station. shooting  must  be carried out. shooting  shooting.shanghai station must be surrounded,  at least a team of  one hundred  soldiers to fight.  twenty  five soldiers shooting in the north, twenty  five soldiers shooting in the south,  twenty  five soldiers  shooting in  the east, twenty  five soldiers shooting in the west.

樣例輸出

shooting 8soldiers 5five 4in 4the 4twenty 4at 2be 2must 2shanghai 2

#include<algorithm>
#include<map>
#include<vector>
#include<iostream>
#include<cstdio>
using namespace std;
char s[52];
map<string,int>m;
vector<pair<string,int> >v;//pair可以用來自己構造一種鍵值對資料型別
bool cmp(pair<string,int>x,pair<string,int>y)//自定義排序時,定義排序規則
{
    if(x.second == y.second)
        return x.first < y.first;//如果數量相同則按照字串小的排序
    return x.second > y.second;//若果數量不同,數量大的靠前
}
int main()
{
    char c;
    int n=0,f=0,num=1;
    while(scanf("%c",&c)!=EOF)//按照一個個字元一個字元輸入,直至檔案結束
    {
        if(c>='a'&&c<='z'||c>='A'&&c<='Z'){
            f=1;
            s[n++]=c;
        }
        else{
            if(f==1){//判斷f是否等於一很重要,等於代表著此時s不為空
                s[n]='\0';
                m[s]++;//加入到map中
                n=0;
                f=0;
            }
        }
    }
    for(map<string, int>::iterator it=m.begin();it!=m.end();it++)
        v.push_back(make_pair(it->first,it->second));//push_back()函式可以在vector,list,set,map等容器中尾部插入資料
                                                     //make_pair()函式用來構造pair對應的引數物件
    sort(v.begin(),v.end(),cmp);
    for(vector<pair<string, int> >::iterator it=v.begin();it!=v.end()&&num<=10;it++,num++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    return 0;
}