hdu2094

来源:互联网 发布:二手交易软件 编辑:程序博客网 时间:2024/06/05 07:54

链接:点击打开链接

题意:如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。

代码:

#include <iostream>#include <string.h>#include <stdio.h>using namespace std;char str[1005][500],a[1005],b[1005];int prefix[1005];int main(){    int i,j,k,n,sum,sign;    while(cin>>n&&n){        memset(str,0,sizeof(str));        memset(prefix,0,sizeof(prefix));        k=1;        for(i=1;i<=n;i++){            cin>>a>>b;            sign=0;            for(j=1;j<=n;j++)            if(strcmp(str[j],a)==0){                sign=1;                break;            }            if(!sign)                   //如果没有出现过这个名字则往里添加            strcpy(str[k++],a);            sign=0;            for(j=1;j<=n;j++)            if(strcmp(str[j],b)==0){                prefix[j]++;                sign=1;                break;            }            if(!sign){                strcpy(str[k],b);                prefix[k]++;                k++;            }                           //处理b时和处理a一样,只不过需要更新prefix数组        }        sum=0;        for(i=1;i<k;i++){               //只有一个prefix数组值为0时才输出yes,就是冠军只有一个,有环或则有关系不确定的输出no//            cout<<prefix[i]<<endl;            if(!prefix[i])            sum++;        }        if(sum==1)        printf("Yes\n");        else        printf("No\n");    }    return 0;}


0 0
原创粉丝点击