產生冠軍

有一羣人,打乒乓球比賽,兩兩捉對撕殺,每兩我的之間最多打一場比賽。
球賽的規則以下:
若是A戰勝了B,B又戰勝了C,而A與C之間沒有進行過比賽,那麼就認定,A必定能戰勝C。
若是A戰勝了B,B又戰勝了C,並且,C又戰勝了A,那麼A、B、C三者都不可能成爲冠軍。
根據這個規則,無需循環較量,或許就能肯定冠軍。你的任務就是面對一羣比賽選手,在通過了若干場撕殺以後,肯定是否已經實際上產生了冠軍。ios

 

Input
輸入含有一些選手羣,每羣選手都以一個整數n(n<1000)開頭,後跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者打敗後者。若是n爲0,則表示輸入結束。spa

 

Output
對於每一個選手羣,若你判斷出產生了冠軍,則在一行中輸出「Yes」,不然在一行中輸出「No」。ci

 

Sample Input
3
Alice Bob
Smith John
Alice Smith
5
a c
c d
d e
b e
a d
0
string

Sample Output
Yes
Noit

#include <iostream>
#include <string>
using namespace std;
int main()
{
int n,m,i,j,k,k1,f;
while(cin>>n&&n)
{
string x[1000],y[1000];
string s[100],s1[100];
for(i=1;i<=n;i++)
cin>>x[i]>>y[i];
k=1;
for(i=1;i<=n;i++)
{
f=0;
for(j=1;j<=n;j++)
{
if(x[i]!=y[j]) {f=1;continue;}
else {f=0;break;}
}
if(f==1)
{
s[k]=x[i];
k++;
}
}
m=s[1].size();
if(m)
{
s1[1]=s[1];
k1=1;
for(i=2;i<=k-1;i++)
{
f=0;
for(j=1;j<=k1;j++)
{
if(s[i]!=s1[j]) {f=1;continue;}
else {f=0;break;}
}
if(f==1)
{
k1++;
s1[k1]=s[i];
}
}
if(k1==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
else cout<<"No"<<endl;
}
return 0;
}io

相關文章
相關標籤/搜索