代码
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
while(n!=0) {
set<string> all;
set<string> lose;
for(int i=0; i<n; i++) {
string s1, s2;
cin >> s1 >> s2;
all.insert(s1);
all.insert(s2);
lose.insert(s2);
}
if(all.size()-lose.size()==1) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
cin>>n;
}
return 0;
}
注解
1、此题的“冠军”,意思是只赢过,没输过。因此用两个set,第一个set记录赢和输的总名单,第二个set只记录输的名单。
2、二者的容量相减,表示只赢过没输过的名单数目。如果容量为1,表示有1个冠军,输出Yes,否则输出No。
3、STL中的set使用。set.insert()方法,set内的元素不会重复。因为lose集合内的元素一定都出现在all内,所以二者相减得到的就是all中独有的那些元素,也就是只赢不输的元素。
4、此题理解题意是关键!