产生冠军

时间限制:1000/1000 MS(Java/其他) 内存限制:32768/32768 K (Java/其他)
提交总数:38623 已接受提交:17522

问题描述
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
球赛的规则如下:
如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
 
输入
输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
 
输出
对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
 
示例输入

3
Alice Bob
Smith John
Alice Smith
5
a c
c d
d e
b e
a d
0
 
示例输出
Yes

No

题解:

#include <iostream>
#include <set>
using namespace std;
int main()
{   /*本题思路是全胜的人才是胜利者,但凡输过一次便不能成为冠军*/set<string>A, B;//定义两个类型为String的集合string S1, S2;int n;while (cin >> n && n) {//或者说可以写成(cin>>n && n!=0)当n为0时退出大循环for (int i = 0; i < n; i++){cin>>S1>>S2;//S1是胜利者,S2是失败者A.insert(S1); A.insert(S2);//将比赛的所有人插入(因为胜利者可以有多次胜利,但所有人不一定全部都有胜利)B.insert(S2);//再插入有过失败记录的人}if (A.size() - B.size() == 1) {//如果说所有人的集合减去失败过人的集合有一个人那么我们可以认为这个人一次都没有输过,即是胜利者printf("Yes\n");}else {printf("No\n");}A.clear(); B.clear();//清空集合}/*因为集合的互异性,所以当失败者重复出现时他只会向集合插入一次元素,本题正是要通过集合的互异性来解题*/return 0;
}

PS:主要用到集合的互异性来解题,因为集合出现重复元素时他只会向内插入一次,因为全胜的人必然不会出现在失败者的集合当中,所以以此题解

hdu 2094 “产生冠军“相关推荐

  1. HDU hdu 2094 产生冠军 拓扑排序 判定环

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2094 对于是否有环,是通过一个N(节点数)的循环来判定.检查并更新每个节点的入度数. 每找到一个入度唯 ...

  2. HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...

  3. HDU 2094 产生冠军

    产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  4. 【ACM】HDU.2094 产生冠军 【STL-map】

    题目链接 问题分析: 题意: rule1:胜负关系具有传递性 rule2:胜负关系形成闭环时,则闭环内的都不可能是冠军 所以大胆猜测,只要输过一次的人就不可能是冠军,统计最后没有输过的人数,若为1,则 ...

  5. HDU 2094 产生冠军

    Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C. 如 ...

  6. HDU 2094产生冠军

    原文链接:http://www.cnblogs.com/FCWORLD/archive/2011/04/07/2007468.html Sample Input 3 Alice Bob Smith J ...

  7. 杭电ACM 2094 产生冠军——C语言)

    Hdu 2094 产生冠军 题目 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之 ...

  8. HDU 2094:产生冠军(拓扑排序)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. 杭电2094产生冠军

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. S5PV210开发 -- 串口驱动开发
  2. AMD EPYC——CPU命名规则
  3. uva 11584——Partitioning by Palindromes
  4. matlab和robotstudio,MATLAB与Robotstudio建立socket通信(初探)
  5. LeetCode 934 最短的桥
  6. 【转】pkg-config与LD_LIBRARY_PATH
  7. 入选《PHP领域内容榜》,感谢CSDN,感谢各位浏览过我的朋友
  8. 2022大厂高频面试题之CSS篇
  9. 用大白菜制作linux启动盘制作工具,使用大白菜+FbinstTool制作多系统的启动盘
  10. JMeter下载安装及入门教程
  11. H264编码格式--图文解释
  12. 我的第一个游戏FoodieThebug完成之后的心得体会--子龙山人
  13. SVN和Git的使用
  14. 学计算机做近视眼手术,做完近视眼手术后多久可以看电脑
  15. DDD(Domain-Driven Design)《领域驱动设计》书籍
  16. 将图片中的公式转化为latex代码(image to latex)。两种方法:python包或者snip软件
  17. 力扣 1723. 完成所有工作的最短时间 二分+回溯+剪枝/状压dp
  18. iPhone 等设备电池正式涨价!网友:“苹果是知道怎样割韭菜的……”
  19. HyperLynx(九)HDMI仿真实例
  20. 安卓版谷歌浏览器怎么样 Android版Chrome评测

热门文章

  1. UG汽车模具设计之汽车模斜顶机构的设计思路,建议收藏
  2. 【SQLServer】用SQL语句更改数据库名,表名,列名
  3. python识别文字软件_【Python 教程】使用 Python 和大漠插件进行文字识别
  4. Linux启动流程rcN.d rcS.d rc.local等
  5. mac下使用docker部署artipub,实现多平台管理,一键同步、一文多发
  6. Android图片代码换色,背景换色
  7. OOP和POP之间的区别
  8. 2023年美赛C题Wordle预测问题一建模及Python代码详细讲解
  9. abp 部署到ubuntu_centos和ubuntu系列总结 - 白色的番茄
  10. 苹果加快创新步伐 美国制造一去不复返