zoukankan      html  css  js  c++  java
  • HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094
    tags: [acm,stl]

    题目链接

    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`

    题意:

    两两之间进行比赛,最后要选择出最终胜利的人。这个最终胜利的人的选择也有一定的要求。就是说这个人必须为胜利次数最多的,并且满足这个最多次数的人有且仅能有一个。

    分析

    因为涉及到一个人可能参与多场比赛且胜负情况不定,因此先给每一个参与比赛的人一个特定的编号,用map容器实现人与编号的意义对应,然后用一个整型的数组来存放这些人的失败的次数,最后做判断,要求数组的值为0(他有参与比赛但是没有输过)的有且仅有一个即为所得。
    代码:

        #include<stdio.h>
        #include<iostream>
        #include<string.h>
        #include<map>
        #include<vector>
        using namespace std;
        int c[1003]= {0};// 计算每个人失败的次数
        bool panduan(int n)//值为1的有且仅能有一个
        {
            int sum=0;
            for(int i=1; i<=n; i++)
            {
                if(c[i]==0)
                    sum++;
                if(sum>=2)
                    return false;
            }
            if(sum==1)
                return true;
            else
                return false;
        }
        int main()
        {
            int n;
            while(~scanf("%d",&n)&&n)
            {
        
                map<string,int>m;
                char a[20],b[20];
                int k=0;
                memset(c,0,sizeof(c));
                for(int i=0; i<n; i++)
                {
                    scanf(" %s%s",a,b);
                    if(m[a]==0)
                        m[a]=++k; ///k的值不能够从0 开始
                    if(m[b]==0) ///表示这个人以前没有出现过
                        m[b]=++k;///每一个人根据名字给他们编号。确保每一个人拥有唯一 不同的编号
                    c[m[b]]++;//失败人的次数加加
                }
                if(panduan(k))
                    printf("Yes
    ");
                else
                    printf("No
    ");
            }
            return 0;
        }
    
  • 相关阅读:
    ASP.NET Web API 控制器执行过程(一)
    ASP.NET Web API 控制器创建过程(二)
    ASP.NET Web API 控制器创建过程(一)
    ASP.NET Web API WebHost宿主环境中管道、路由
    ASP.NET Web API Selfhost宿主环境中管道、路由
    ASP.NET Web API 管道模型
    ASP.NET Web API 路由对象介绍
    ASP.NET Web API 开篇示例介绍
    ASP.NET MVC 视图(五)
    ASP.NET MVC 视图(四)
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6729607.html
Copyright © 2011-2022 走看看