hdu 2094(产生冠军)
思路一:产生冠军的条件:(1)获胜的人没输过一次(2)最终获胜的人只有一个
思路二:观察一下,可以看到其实只要总元素数-失败者==1就可以输出YES了。。
思路三:左边的为胜利者,右边的为失败者,如果左边的胜利者只有一个没在右边出现过,那么这个就是产生的冠军,否则产生不了
思路一:
#include<stdio.h> #include<map> #include<string> #include<iostream> using namespace std; string s1,s2; map<string,int>mv; map<string,int>lo; map<string,int>::iterator it; int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { getchar(); mv.clear(); lo.clear(); for(int i=0; i<n; i++) { cin>>s1>>s2; lo[s2]++;//insert it=mv.find(s2);//find and delete loser if(it!=mv.end())//found mv.erase(it); it=lo.find(s1); if(it==lo.end())// not found mv[s1]++; } int sum=mv.size(); //for(it=mv.begin(); it!=mv.end(); it++) //sum++; if(sum==1)cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }