2094 “产生冠军”

问题描述

有一群人,两两对决,一共比赛了n次,胜负判定如下:

A打败了B,B打败了C,则A可以打败C,A是最后的胜利者

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

结论: Set(所以人) - Set(失败的人) = 1

代码如下

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 //A 所有人数  B失败的人数  A-B=1产生了冠军
 5 int main()
 6 {
 7     set<string> A,B;   //定义集合
 8     string s1,s2;
 9     int n;
10     while(cin>>n && n){    //比赛的次数
11         for(int i = 0 ; i < n; i++){
12             cin >> s1 >>s2;      //s1代表胜利者,s2代表失败者
13             A.insert(s1);
14             A.insert(s2);
15             B.insert(s1);
16         }
17         if(A.size() - B.size() == 1){
18             cout<<"Yes"<<endl;
19 
20         }else{
21             cout<<"No"<<endl;
22         }
23         A.clear();   //清空
24         B.clear();
25     }
26 
27     return 0;
28 }

总结

一、set集合的特性排序且不重复

posted @ 2022-08-15 22:19  暖阳的雪  阅读(24)  评论(0)    收藏  举报