[set] 鸟语字典

来源:互联网 发布:特大电信网络诈骗案 编辑:程序博客网 时间:2024/04/29 03:53

Description
Robin是一只极其聪明的鸟,他着迷于人类丰富多彩的语言。经过长时间的摸索,Robin模仿人类的英语创造了鸟类的语言。与英语类似,这种鸟语的基本单位也是由26个小写英文字母a至z组成。同时,若干个字母组成一个单词,用来表达一定的意思(和英语一样?!),相邻两个单词用一个空格隔开。Robin为他新发明的鸟语创造了丰富的词汇,并花大量精力写出一本鸟语字典。正如你所想的那样,Robin想把一些英文的书籍(如《时间简史》、《物种起源》)翻译成鸟语。但是这项工作实在是太浩大了,以致于Robin无法完成,聪明的Robin想到使用计算机,他编写了一个自动翻译的程序来翻译这些书籍。但是很快他发现,有很多词汇是他原先没有想到的。对于这种情况,他的自动翻译程序将会不对其做翻译,而是直接放入译文。
下面是一个例子,字典中只有4个英文单词及其鸟语含义。给出下列一个英文句子:I am a clever bird.
翻译后的鸟语语句为:op dg a clever myself.
现在,Robin已经翻译了一些著作,他希望补充他的鸟语字典。因此,他想知道有多少单词在他的鸟语字典里是没有的,并且他想统计出在这些没有出现在他的鸟语字典中的单词中,出现次数最多的单词是哪一个?

Sample Input
3
ae
jd
opd
ae jd . jda opq jda ae. ld jd opq!

Sample Output
3
jda
opq

Hint
100%的数据:1≤n≤10000。

set直接做就好了 就是输入进来有点恶心。。。

#include<cstdio>#include<string>#include<iostream>#include<algorithm>#include<set>#include<map>using namespace std;int N,M,K,Tot;string Ans[20005];set<string> Set;map<string,int> Cnt;struct Node{    int l;    string s;}Q[20005];bool Cmp(Node i,Node j){    if(i.l!=j.l)        return i.l<=j.l;    return i.s<j.s;}int main(){    int i,l,mx=0;    string s;    ios::sync_with_stdio(false);    cin>>N;    for(i=1;i<=N;i++){        cin>>s;        Set.insert(s);    }    while(!cin.eof()){        cin>>s;        l=s.length(),i=0;        while(i<l&&s[i]>='a'&&s[i]<='z')            i++;        if(i){            Q[++M].s=s.substr(0,i);            Q[M].l=Q[M].s.length();            Cnt[Q[M].s]++;        }    }    sort(Q+1,Q+M+1,Cmp);    for(i=1;i<=M;i++)        if((i==1||Q[i].s!=Q[i-1].s)&&!Set.count(Q[i].s)){            K++;            if(Cnt[Q[i].s]>mx){                Ans[Tot=1]=Q[i].s;                mx=Cnt[Q[i].s];            }            else if(Cnt[Q[i].s]==mx)                Ans[++Tot]=Q[i].s;        }    cout<<K<<endl;    for(i=1;i<=Tot;i++)        cout<<Ans[i]<<endl;    return 0;}
原创粉丝点击