HDU2094(产生冠军)题解

以防万一,题目原文和链接均附在文末。那么先是题目分析:

【一句话题意】

根据给定现有比赛结果推断分析冠军。(这描述...我建议还是看题吧,题不长)

【题目分析】

给出的数据是每两个选手之间的关♂系,于是以为是简单链表,后来感觉是并查集,再后来才发现都不科学。于是换了一个特别科学普通简单粗暴可爱的方法。
在说方法之前,我想吐槽几句。这道题似乎不够严谨。数据里如果有一组是a>b;b>c;c>a;d>e的话,这将分为两个不相关的组合。这种情况我感觉应该输出的是No(两组人之前根本没有比赛,没办法知道d是不是可以打败abc成为冠军)。而实际上输出的是Yes。所以。。。。。。。。感觉不科学吧。。

【算法流程】

列名单,塞人员:
实际上就是把所有人名都列出来,从来没赢过的摔倒,赢过并且输过的摔掉。剩下的如果只有一个那就是冠军,如果不止一个就不是了。
简单优化:
与其列出所有人名然后筛选出赢过的,还不如直接只给赢过的列表。那么我们需要两个表,一个放赢家(只要赢过都算),一个放输家(只要输过的就算)。接下来拿赢家中的每一个对象在输家中找,如果找到就可以摔掉了。最后剩下的就是超级大赢家了。当然,为了去重,我们选择使用STL容器中的set集合处理去重。
STL:SET(std::set):

  • 初始化创建:set<string> loserList;
  • 清空元素:loserList.clear();
  • 在集合中插入:loserList.insert(loser);
  • 查找在集合中是否存在:loserList.find(*winnerIter)==loserList.end()//则不存在

这些东西列出来供尚未接触STL的人参考
从未接触过std::set的话,更多相关参见http://www.cplusplus.com/reference/set/set/
从未接触过STL的话,请复习cpp。

#include <iostream>
#include <string>
#include <algorithm>
#include <set>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>#define each(i,n) (int i=1;i<=(n);++i)using namespace std;int main() {set<string> winnerList;set<string> loserList;string winner,loser;int dataCount, flag;while(scanf("%d",&dataCount)!=EOF){if (dataCount == 0) break;winnerList.clear();loserList.clear();while(dataCount--){cin>>winner>>loser;winnerList.insert(winner);loserList.insert(loser);}flag = 0;set<string>::iterator winnerIter=winnerList.begin();for(;winnerIter!=winnerList.end();winnerIter++) {if (loserList.find(*winnerIter)==loserList.end()){//cout<<"["<<*winnerIter<<endl;本来以为需要输出赢家是谁呢。。。++flag;//break;
            }}if (flag == 1) {cout<<"Yes"<<endl;} else {cout<<"No"<<endl;}}
}
/*
TestData(IN)
3
Alice Bob
Smith John
Alice Smith
5
a c
c d
d e
b e
a d
0
TestData(OUT)
Yes
No
*/


题目链接:(HDU 2094)产生冠军

题目属性:脑筋急转弯(有说是并查集的,还有说是拓扑排序的,我刚开始还以为是单链表,嘛,管他呢。。),STL应用练习(可以当应用练习吧。。)
相关题目:1342、1361、1370、1506、1577、1597、1702、1716、1727(并非都是脑筋急转弯)
题目原文:
【Desc】有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
球赛的规则如下:
如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
【In】输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
【Out】输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
【SampIn/Out】参见代码下方的注释。

转载于:https://www.cnblogs.com/blumia/p/hdu2094.html

HDU2094(产生冠军)题解相关推荐

  1. HDU2094 产生冠军【set】

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

  2. HDU2094 产生冠军

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

  3. hdu2094产生冠军

    http://acm.hdu.edu.cn/showproblem.php?pid=2094 其实这题也不算是拓扑排序了 只需要判断最开始入度是否唯一就可以了 如果是0  肯定有环了 不是0 会有多个 ...

  4. HDU-2094 产生冠军

    题中先用并查集判定是否所有点都有联系,即能够拼成一个连通的无向图. 再判定入度为零的点是否为1即可. 代码如下: #include <stdio.h> #include <strin ...

  5. c语言折半查找法找字符,C语言折半查找法练习题冒泡排序

    MongoDB管理工具的插件系统 MongoDB管理工具  MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了 ...

  6. TYUT-A2专题题解

    TYUT-A2专题题解 循序渐进,基础练起. 01递推与组合 HDU1210 Eddy's 洗牌问题[递推函数+模拟] - 海岛Blog - CSDN博客 HDU2044 一只小蜜蜂...[递推] - ...

  7. TYUT-A专题题解(一)

    TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...

  8. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  9. ACM程序设计基础题解

    ACM水题一 HDU1262 寻找素数对[素数] - 海岛Blog - CSDN博客 HDU4548 美素数[水题] - 海岛Blog - CSDN博客 HDU2503 a/b + c/d[水题] - ...

  10. ACM程序设计基础(1)题解

    ACM水题一 HDU1262 寻找素数对[素数] - 海岛Blog - CSDN博客 HDU4548 美素数[水题] - 海岛Blog - CSDN博客 HDU2503 a/b + c/d[水题] - ...

最新文章

  1. 15个产业级算法推出、35个高精度预训练模型上线!最强国产开源AI框架再进化,密集提升视觉产业实战能力...
  2. Ubuntu下用devstack单节点部署Openstack
  3. java基本语法——常量、变量、数据类型
  4. dll注入工具_UnmanagedPowerShell工具分析
  5. 深入理解javascript之原型和原型链
  6. tar.gz及tar.bz2两种常见格式的打包压缩及解压方法
  7. 转:Real6410 Linux 常见问题总结(截至2010/07/26)
  8. python中int什么意思_python3中int(整型)的使用教程
  9. zookeeper的会话
  10. python gdbm_linux下python安装
  11. 石、鋏、布~ 最疯狂的打斗场面,莫要错过,iphone手机游戏
  12. 漫谈 Clustering (4): Spectral Clustering
  13. opencv学习笔记(三)颜色转换 cvtColor
  14. linux 如何重建mbr,重建mbr要不要勾选
  15. 使用GitHub小总结
  16. 关于硬件批量贴片焊接流程
  17. 香港90年代电视剧推荐
  18. jdbc mysql url写法_详解数据库连接的URL的写法及总结
  19. Android EagleEye笔记
  20. 如何将eml格式转换成pdf文档

热门文章

  1. 微信小程序 云开发 和 传统服务器 对比 区别
  2. Kubernetes 小白学习笔记(14)--k8s集群路线-join原理
  3. 270 扩展固态硬盘_希捷硬盘白送3年原厂数据恢复!成功率高达90
  4. c 语言编程怎样弄循环语句,C 语言循环语句
  5. 两个页面用url传值 和设置页面字段为不可编辑或是只读
  6. pp什么叫php的事务,ThinkPHP5.0框架事务处理操作简单示例
  7. Could not find or load main class org.apache.hadoop.hdfs.server.namenode.NameNode
  8. 悲剧!IDEA 突然找不到类了?
  9. MongoDB 数据库_集合_文档 操作
  10. Idea中@Autowired 黄色波浪线问题,注入类显示红色波浪线,去除重复代码导致的波浪黄线,去除xml文件里sql语句的黄色行背景色,问题解决