• (set)产生冠军 hdu2094


    产生冠军
    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 19288    Accepted Submission(s): 8751
     
     
    Problem Description
    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
    球赛的规则如下:
    如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
    如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
    根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
     
    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
     
    Author
    qianneng
     
    Source
     
    Recommend
    lcy
     
     
    思路:
    比赛中互有胜负,将所有人放入一个集合中,输的人放入另一个集合中。只有唯一一个人没有输时,才能产生冠军。所以会用set。
    #include<iostream>
    #include<string>
    #include<set>
    using namespace std;
    int main()
    {
         int n;
         set<string> all,lose;
         string winner,loser;
         while(cin>>n&&n!=0){
             all.clear();
             lose.clear();
             while(n--){
                 cin>>winner>>loser;
                all.insert(winner); //set中后面插入一个元素用insert。
                 all.insert(loser);
                 lose.insert(loser);
             }
            if(all.size()-lose.size()==1) //表示只有一个人没有输时,才能有冠军。
                 cout<<"Yes"<<endl;
             else
                 cout<<"No"<<endl;
         }
         return 0;
    }
     

    请使用手机"扫一扫"x

  • 相关阅读:
    Extjs Ext.extend函数的使用
    Silverlight 4 用户名密码验证提示
    Balsamiq Mockups
    自定义RDLC报表的数据集(手工编辑rdlc文件,配置数据集)
    VS2010 帮助文档离线安装
    为 Silverlight 客户端生成服务
    将Win7电脑改造成无线路由
    RDLC报表:每页显示N条记录
    C# 禁止ALT+F4
    让C#程序run anywhere 脱离.net Framework框架环境
  • 原文地址:https://www.cnblogs.com/Weixu-Liu/p/9174850.html
Copyright © 2020-2023  润新知