[set] 鸟语字典

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值