HDU2094(产生冠军)题解
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 == ) break;
winnerList.clear();
loserList.clear();
while(dataCount--){
cin>>winner>>loser;
winnerList.insert(winner);
loserList.insert(loser);
}
flag = ;
set<string>::iterator winnerIter=winnerList.begin();
for(;winnerIter!=winnerList.end();winnerIter++) {
if (loserList.find(*winnerIter)==loserList.end()){
//cout<<"["<<*winnerIter<<endl;本来以为需要输出赢家是谁呢。。。
++flag;
//break;
}
}
if (flag == ) {
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】参见代码下方的注释。
HDU2094(产生冠军)题解的更多相关文章
- HDU2094产生冠军 (拓扑排序)
HDU2094产生冠军 Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认 ...
- hdu2094产生冠军(思维题)
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu2094产生冠军[STL set]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu2094 题干 代码和解释 题意可以这样理解:一个人只要没输过就可以是冠军,如果没输过的人恰为一位,那就认他为冠军,若少于或多于一位,则判定没有 ...
- hdu2094—看似拓扑实际上是一道思维题
HDU2094 产生冠军 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 题意:中文题,就不解释了.题意已经非常清楚了. 这道题的看起来像是一 ...
- hdu 5774 Where Amazing Happens 水题
Where Amazing Happens 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5774 Description As the premie ...
- (set)产生冠军 hdu2094
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 产生冠军(hdu2094)
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 题解报告:hdu 2094 产生冠军
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打 ...
- BZOJ1934:[SHOI2007]善意的投票 & BZOJ2768:[JLOI2010]冠军调查——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1934 https://www.lydsy.com/JudgeOnline/problem.php? ...
随机推荐
- eclipse.ini内存设置
这两天用eclipse,突然变得很卡,就上网找了些资料,对eclipse.ini启动参数配置,整理如下: 1.先了解下JVM内存管理机制,JVM内存分为堆内存和非堆内存 2.JVM内存限制 首先JVM ...
- WLW 截屏插件
转载:http://www.xtit.net/post/1030/ 一直以来用WLW更新博客,刚刚在DailyApps看到一个关于Windows Live Writer的截屏插件,相当不错. 是由MS ...
- C#中精确计时的一点收获
以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @ 3.00GHz 2.99GHz,2.96GB内存 根据综合网上的一些文章,精 ...
- TCP/IP详解之:SNMP
基于TCP/IP的网络管理包含3个组成部分: 一个管理信息库MIB:MIB包含所有代理进程的所有可被查询和修改的参数 关于MIB的一套公用的结构和表示符号,即SMI(管理信息结构) 管理进程和代理进程 ...
- 使用PHP自动部署GIT代码
最近在使用Coding的代码托管,顺便设置了WebHook自动部署,过程还是挺艰辛的,主要还是没搞懂Linux的权限控制,不过好在弄好了,分享一下获益最深的一篇文章,供大家参考,原文是英文版的,我的英 ...
- 计算球体积,hdu-2002
计算球体积 Problem Description 根据输入的半径值,计算球的体积. Input 输入数据有多组,每组占一行,每行包括一个实数,表示球的半径. Output 输出对应的球的体积 ...
- px,dp,dip,sp,in,mm,pt详细分析
px,dp,dip,sp,in,mm,pt详细分析 px :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip :(devi ...
- Oracle EBS-SQL (PO-12):检查期间请购单的下达记录数.sql
SELECT DECODE(PRHA.INTERFACE_SOURCE_CODE,'','手工','MRP','自动') 下达方式, PRHA.CREATION_DATE ...
- 安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS【下】
1. HTTPS 1.1. 什么是HTTPS HTTPS(HypertextTransfer Protocol Secure)即安全的HTTP.HTTPS的安全基础是安全套接层(Secure Soc ...
- QT:窗口最小化时显示一个小浮标
有些窗口在自身最小化时要在桌面上显示一个小浮标,让用户利用这个小浮标进行各种操作(例如迅雷的悬浮窗一样),我试着用QT实现一下这个功能. PS:本来以为这个功能很简单,却搞了我两个晚上,泪奔... 思 ...