hdoj 2094 產生冠軍
阿新 • • 發佈:2019-02-10
考察點: 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; }