博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL使用
阅读量:4216 次
发布时间:2019-05-26

本文共 2246 字,大约阅读时间需要 7 分钟。

产生冠军

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20929    Accepted Submission(s): 9465


Problem Description
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。

球赛的规则如下:

如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。

如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。

根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。

 

Input
输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。

 

Output
对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。

 

Sample Input
 
3
Alice Bob
Smith John
Alice Smith
5
a c
c d
d e
b e
a d
0
 

Sample Output
 
Yes
No

这里 因该注意 map,vector等 迭代器的使用,其中尤其是设计erase时候

思路 : 寻找 没有入度的定点 ,看其数量是否 大于 1个

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define msi map
using namespace std;const int N = 1005;int in[N];int main() { int n; while(cin >> n && n){ msi m; string s1,s2; memset(in,0,sizeof(in)); m.clear(); int num = 0; int cnt = 0; for(int i = 0; i < n; ++i){ cin >> s1 >> s2; if(!m.count(s1)){//这里写成 !m[s1]死活都不对 不知道到为啥 m.insert(make_pair(s1,++num)); } if(!m.count(s2)){ m.insert(make_pair(s2,++num)); } ++in[m[s2]]; } int p = 0; for(int i = 1; i <= num; ++i){ if(in[i] == 0){ ++p;T } }// int p = 0;// for(msi::iterator i = a.begin(); i != a.end(); ++i){// if(in[i->second] == 0){// ++p;// }// } if(p == 1){ printf("Yes\n"); } else{ printf("No\n"); } } return 0; }

方法二:

#include
#include
#include
#include
#include
#include
#include
#define vit vector
::iterator#define mst map
using namespace std;const int N = 1005;mst m;set
a;set
b;int main() { int n; string s1, s2; while(cin >> n && n){ a.clear(); b.clear(); m.clear(); for(int i= 0; i < n; ++i){ cin >> s1 >> s2; a.insert(s1); b.insert(s2); m[s1] = 0; } //直接死循环// for(set
::iterator i = a.begin(); i != a.end(); ++i){// for(set
::iterator j = b.begin(); j != b.end(); ++j){// if(*i == *j){// a.erase(*i);// break;// }// }// } for(set
::iterator i = b.begin(); i != b.end(); ++i){ for(set
::iterator j = a.begin(); j != a.end(); ++j){ if(*i == *j){ a.erase(j); break; } } } if(a.size() == 1) printf("Yes\n"); else printf("No\n"); } return 0; }

转载地址:http://agimi.baihongyu.com/

你可能感兴趣的文章
手动12 - 安装php加速器 Zend OPcache
查看>>
set theme -yii2
查看>>
yii2 - controller
查看>>
yii2 - 增加actions
查看>>
php图像处理函数大全(缩放、剪裁、缩放、翻转、旋转、透明、锐化的实例总结)
查看>>
magento url中 uenc 一坨编码 base64
查看>>
强大的jQuery焦点图无缝滚动走马灯特效插件cxScroll
查看>>
Yii2.0 数据库查询
查看>>
yii2 db 操作
查看>>
mongodb group 有条件的过滤组合个数。
查看>>
关于mongodb的 数组分组 array group
查看>>
MongoDB新的数据统计框架介绍
查看>>
mongodb 增加全文检索索引
查看>>
QC数据库表结构
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>