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

输入格式

输入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=;
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=;i<n;i++){
cin>>c[i]>>d[i];
if(i==){
mp1[c[i]]=;//第一个出现的一定不是复读机
}
else mp1[c[i]]=;//复读机标记为0;
}
int pos=;
for(int i=;i<n;i++){
if(d[i]==d[i-]&&mp1[c[i]]!=){//如果说第i个人重复了前一个人的话,并且不为1那么他就是复读机
mp2[c[i]]++;
}
else {
mp1[c[i]]=;//不是复读机标记为0;
}
}
      //将复读机的熟练度与名字转换为结构体数组
  for(it=mp1.begin();it!=mp1.end();it++){
if(it->second!=){
arr[pos].a=it->first;
arr[pos].b=mp2[it->first];
pos++;
}
}
if(pos==){
cout<<"Unbelievable!"<<endl;
}
else {
// sort(arr,arr+pos);//如果用内置函数的话用这个排序
sort(arr,arr+pos,cmp); //外置cmp用这个排序
for(int i=;i<pos;i++){
cout<<arr[i].a<<endl;
}
}
mp1.clear();
mp2.clear(); }
return ;
}

B. 复读机的力量的更多相关文章

  1. UOJ #450「集训队作业2018」复读机

    UOJ #450 题意 有$ k$台复读机,每时每刻有且只有一台复读机进行复读 求$ n$时刻后每台复读机的复读次数都是$ d$的倍数的方案数 $ 1\leq d \leq 3,k \leq 5·10 ...

  2. UOJ#450. 【集训队作业2018】复读机 排列组合 生成函数 单位根反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做“单位根反演”,它在 FFT 的时候用到过: $$\frac 1 ...

  3. 处女座与复读机 DP

    题目链接:https://ac.nowcoder.com/acm/contest/327/G 题意:给你两个字符串序列,让你根据第二个序列判断是不是 复读机,复读机会有以下特征 1.       将任 ...

  4. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  5. 牛客国庆集训派对Day4 J-寻找复读机

    链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  6. [2018集训队作业][UOJ450] 复读机 [DP+泰勒展开+单位根反演]

    题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$ ...

  7. uoj#450. 【集训队作业2018】复读机(单位根反演)

    题面 传送门 题解 我的生成函数和单位根反演的芝士都一塌糊涂啊-- \(d=1\),答案就是\(k^n\)(因为这里\(k\)个复读机互不相同,就是说有标号) \(d=2\),我们考虑复读机的生成函数 ...

  8. UOJ #450. 【集训队作业2018】复读机

    前置知识单位根反演自己去浅谈单位根反演看(此外可能需要一定的生成函数的姿势) 首先一看\(d\)这么小,那我们来分类讨论一下吧 当\(d=1\)时,显然答案就是\(k^n\) 当\(d=2\)时,如果 ...

  9. 牛客寒假算法基础集训营2 【处女座与复读机】DP最小编辑距离【模板题】

    链接:https://ac.nowcoder.com/acm/contest/327/G来源:牛客网 一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女 ...

随机推荐

  1. Mysql常用sql语句(一)- 操作数据库

    21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...

  2. Linux上安装配置Keepalived

    Linux上安装配置Keepalived 1.下载 自行去Keepalived官网进行下载,也可以通过如下链接进行下载2.0.18版本(目前的稳定版) 链接:https://pan.baidu.com ...

  3. 编译原理:LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  4. Redis 主从复制机制(集群)与 哨兵机制

    1,什么是redis 主从复制 支持多个数据库之间的数据同步.只能一个主数据库(master),可以一个或者多个从数据库(slave) 主数据库,可以读写 从数据库,只可以读 当主数据库,做写的操作的 ...

  5. NSObject常用方法

    类 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } // 初始化加载 + (void)load; / ...

  6. 《java编程思想》 初始化与清理

    1.初始化与清理的重要性: 1.许多C程序的错误都源于程序员忘记初始化变量,特别是使用程序库时,如果不知道如何初始化库的构件更容易出错 2.当使用完一个元素时,这个元素就不会有什么影响了,所以很容易就 ...

  7. Python面向对象之异常处理

    1:什么是异常 异常就是在我们的程序在运行过程中由于某种错误而引发Python抛出的错误: 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序 ...

  8. 第一章构建vue项目,代码仓库管理

    一.安装node.js.vue-cli脚手架 1.安装node.js 下载地址:https://nodejs.org/en/download 查看版本号 node -v .npm -v 出现版本号即安 ...

  9. postman 参数传递

    pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test(& ...

  10. python 程序双击执行的小技巧

    文章更新于:2020-04-03 按照惯例,需要的文件附上链接放在文首. 文件名:ICOFX图标制作软件.7z 文件大小:40.2 MB 下载链接:https://www.lanzous.com/ia ...