hdoj 2094 产生冠军

 

考察点:  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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值