1. 程式人生 > >hdoj 2094 產生冠軍

hdoj 2094 產生冠軍

考察點:  set<string>的應用

題目大意:兩兩比賽,輸入值a,b,即為a贏了b,對於所有的ab組,求出是否能夠產生冠軍。

如果A打敗了B,B又打敗了C,而且,C又打敗了A,那麼A、B、C三者都不可能成為冠軍。

題目解析: 如果能夠產生冠軍,則應該有且只有一個勝者,

此時我們可以將所有的參賽隊員放入set<string> sum,將所有的失敗者放入set<string> fail,

如果最終sum中的個數比fail中的個數多1,即能夠產生冠軍,輸出yes,否則不能產生冠軍,輸出no

AC程式碼:

#include <iostream>      //使用set<string>應呼叫的標頭檔案
#include <stdio.h>
#include <string.h>
#include <set>            //使用set<string>應呼叫的標頭檔案
using namespace std;
int main()
{
    int n;
    set<string> sum;
    set<string> fail;
    char str1[1010],str2[1010];
    while(scanf("%d",&n),n)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%s%s",str1,str2);
            sum.insert(str1);
            sum.insert(str2);       //   將失敗者和勝者都放入sum
            fail.insert(str2);      //   將失敗者放入fail
        }
        if(sum.size()-fail.size()==1)   //   判斷能否產生冠軍
            printf("Yes\n");
        else printf("No\n");
        
        sum.clear();
        fail.clear();                //釋放集合佔用的空間
    }
    
    return 0;
}