题目地址
这道题给我的启示是,对于逻辑判断能否找到等价的逻辑判断。
直接或者间接打败所有人,相当于只存在一个人没有输过。
间接打败:每一个被被打败的人中,打败他的都是冠军或者不是冠军,如果存在冠军,那必然只有一个人没有输过,如果不存在冠军,至少两个人没被击败过。
代码
#include <cstdio>
#include <set>
#include <string>
#include <iostream>
using namespace std;
int main() {
set<string> win;
set<string> los;
int n;
while(cin >> n && n) {
while(n--) {
string w, l;
cin >> w >> l;
win.insert(w);
los.insert(l);
}
set<string> l_win;
for(set<string>::iterator i = win.begin(); i != win.end(); i++) {
bool flag = 0;
for(set<string>::iterator j = los.begin(); j != los.end(); j++) {
if(*i == *j) {
flag = 1;
break;
}
}
if(!flag) {
l_win.insert(*i);
}
}
if(l_win.size() == 1) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
win.clear();
los.clear();
}
return 0;
}