HDU2094產生冠軍
阿新 • • 發佈:2019-02-18
產生冠軍 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21868 Accepted Submission(s): 9919 Problem Description 有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。 Input 輸入含有一些選手群,每群選手都以一個整數n(n<1000)開頭,後跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝後者。如果n為0,則表示輸入結束。 Output 對於每個選手群,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。 Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0 Sample Output Yes No |
AC程式碼:
#include<iostream> #include<algorithm> #include<cstring> #include<map> #include<vector> #include<string> using namespace std; const int maxn=1e3+10; int n,m; map<string,int> mp,mo; vector<string> ve; int main() { int n; string s1,s2,str; int a; while(cin>>n,n) { for(int i=0;i<n;i++) { cin>>s1>>s2; ve.push_back(s1); //儲存勝者 mp[s2]++; //輸者出現次數 } int j=0,k=0; while(!ve.empty()) { str=*ve.begin(); if(mp[str]==0) //判斷勝者裡是否有輸者,沒有就++ { mo[str]++; } ve.erase(ve.begin()); } j=mo.size(); //如果最終勝者裡只有一個,輸出“YES”,否則輸出“NO” if(j==1) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } mp.clear(); mo.clear(); } return 0; }