ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

B. 复读机的力量

2019-07-22 09:04:52  阅读:284  来源: 互联网

标签:int pos 复读机 mp1 力量 复读 熟练度



我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。

输入格式

输入T组,(1≤T≤10)
每组第一行输入一个正整数N,表示聊天记录的长度(1≤N≤10000)。
接下来N行,每行两个字符串,前一个字符串为姓名,后一个字符为聊天记录。
保证所有字符串长度不超过50,保证所有字符串只包含小写字母.

输出格式

如果没有复读机,输出 “Unbelievable!”(不包含引号)
否则按照熟练度从大到小输出所有的复读机,如果熟练度相同,按照字典序从小到大输出。

样例

Input
1
4
codancer iamsovegetable
dicer iamsovegetable
todest iamsovegetable
capryang iamsovegetable
Output
capryang
dicer
todest

提示

数据保证上面大佬们说的话都是瞎话。

刚看到这个题目的时候觉得还可以,可以写写看,,然后扣了将近两个小时也没写出来,后来听别人说的时候发现自己一开始就TM的错了,然后又写了N多边,,最后终于AC了

思路 :1第一个说话的人一定不是复读机

     2如果说一个人是复读机,那么他,每次说话,都要重复前一个人的话;

     3如果说一个人开始重复前一个人的话,看着有点像复读机。但后来没有重复前一个人的话,那么他也不是复读机。

#include<iostream>
#include<map>
#include<algorithm>
#include<string>

using namespace std;
const int N=10010;
struct stu 
{
    string a;//保存复读机的名字 
    int b;//保存复读机的熟练度 
//    bool friend operator <(const stu &x,const stu &y){
//        if(x.b!=y.b) return x.b>y.b;
//        return x.a<y.a;//内置重载,直接定义排序规则,也可以在外边写一个cmp 
    //}
}arr[N];
bool cmp(stu x,stu y){
        if(x.b!=y.b) return x.b>y.b;
        return x.a<y.a; 
    }
 
 
 
int main()
{
    int t;
    cin>>t;
    while(t--){
        map<string,int >mp1,mp2;//判断是否为复读机 mp1用来标记不是复读机的人,mp2用来标记复读机的熟练度
        map<string,int>::iterator it;
        int n;
        cin>>n;
        string c[N],d[N];
        for(int i=0;i<n;i++){
            cin>>c[i]>>d[i];
            if(i==0){
                mp1[c[i]]=1;//第一个出现的一定不是复读机 
            }
            else mp1[c[i]]=0;//复读机标记为0;
        }
        int pos=0;
        for(int i=1;i<n;i++){
            if(d[i]==d[i-1]&&mp1[c[i]]!=1){//如果说第i个人重复了前一个人的话,并且不为1那么他就是复读机
                mp2[c[i]]++;
            }
            else {
                mp1[c[i]]=1;//不是复读机标记为0;
            }
        }
      //将复读机的熟练度与名字转换为结构体数组   for(it=mp1.begin();it!=mp1.end();it++){ if(it->second!=1){ arr[pos].a=it->first; arr[pos].b=mp2[it->first]; pos++; } } if(pos==0){ cout<<"Unbelievable!"<<endl; } else { // sort(arr,arr+pos);//如果用内置函数的话用这个排序 sort(arr,arr+pos,cmp); //外置cmp用这个排序 for(int i=0;i<pos;i++){ cout<<arr[i].a<<endl; } } mp1.clear(); mp2.clear(); } return 0; }

 

 

 

 

标签:int,pos,复读机,mp1,力量,复读,熟练度
来源: https://www.cnblogs.com/Accepting/p/11223808.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有