hdu 2094 产生冠军

产生冠军

 思路:这道题,先读题分析,我们可以知道,为了产生冠军,会进行两两比赛,让我们寻找一种办法判断是否产生冠军,既然提到了方法,那么意味着,必有一个简便方法来判断是否有冠军,因为,两两发生比赛,一个人可能产生多场比赛,但是,我们换成一下思路,什么是冠军,冠军即使唯一没输过的人,所以,当全部人数-输掉的人数=1时,即产生了冠军。此时,分析到这里,我们也可以判断使用set容器,不录入重复。

代码:

#include<iostream>
#include<set>
#include<string>
using namespace std;

int main(){

    int n;
    while (cin >> n&&n){
        string a, b;
        set<string> s1, s2;
        for (int i = 0; i < n; i++){
            cin >> a >> b;
            s1.insert(a);
            s1.insert(b);
            s2.insert(b);
        }
        if (s1.size() - s2.size() == 1){
            cout << "Yes" << endl;
        }
        else{
            cout << "No" << endl;
        }
    }

    system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/pcdl/p/12369344.html