• 产生冠军(hdu2094)


    产生冠军

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7011    Accepted Submission(s): 3310

    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

    并查集思想,前后数据,首先sum都为1,当假设a>b,即a赢b,那么比较如果有b==a的就试sum对应的值为0,表示失败;
    那么做完之后就只剩下赢的人,如果赢的人只有一个,那么输出Yes,否则输出No;
    #include<iostream>
    using namespace std;
    #define M 2005
    int main()
    {
        int n;
        int i,j;
        char a[M][100],b[M][100];
        int sum[M],c[M];
        while(cin>>n,n)
        {
            memset(sum,0,sizeof(sum));  //0表示失败
    
            for(i=0;i<n;i++)
            {
                cin>>a[i]>>b[i];
                sum[i]=1;        // 1表示获胜
                 
            }
    
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    if(strcmp(a[i],b[j])==0) 
                        sum[i]=0;//去掉后与前一样的,
                }
            }
            
             int k=0;
             for(i=0;i<n;i++)
             {
                 if(sum[i]==1) 
                     c[k++]=i;//a[]的个数;
             }
    //         printf("%d
    ",k); //k统计留下的a[]数组个数
             int flag=1;
             for(i=1;i<k;i++)
             {
                 if(strcmp(a[c[0]],a[c[i]])==0) 
                     flag++;
             }
    
             if(flag==k) 
                 cout<<"Yes"<<endl;
             else 
                 cout<<"No"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    js简单工厂
    对象数组深浅拷贝
    分时函数的通用实现
    SQL技术内幕-4 row_number() over( partition by XX order by XX)的用法(区别于group by 和order by)
    SQL技术内幕-2
    SQL技术内幕-1
    js 阻止冒泡 兼容性方法
    C# 给数据库传入当前时间
    Ms sql server sql优化技巧
    SQl 字段中出现某一个词语的次数
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3430145.html
Copyright © 2020-2023  润新知