标签:
链接:点击打开链接
题意:如果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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/stay_accept/article/details/47728513