标签:
链接:点击打开链接
题意:如果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