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集合的特性排序且不重复

浙公网安备 33010602011771号