X-man

导航

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;

}

 

posted on 2013-04-22 21:33  雨钝风轻  阅读(160)  评论(0编辑  收藏  举报