考察点: set<string>的应用
题目大意:两两比赛,输入值a,b,即为a赢了b,对于所有的ab组,求出是否能够产生冠军。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
题目解析: 如果能够产生冠军,则应该有且只有一个胜者,
此时我们可以将所有的参赛队员放入set<string> sum,将所有的失败者放入set<string> fail,
如果最终sum中的个数比fail中的个数多1,即能够产生冠军,输出yes,否则不能产生冠军,输出no
AC代码:
#include <iostream> //使用set<string>应调用的头文件
#include <stdio.h>
#include <string.h>
#include <set> //使用set<string>应调用的头文件
using namespace std;
int main()
{
int n;
set<string> sum;
set<string> fail;
char str1[1010],str2[1010];
while(scanf("%d",&n),n)
{
for(int i=1;i<=n;i++)
{
scanf("%s%s",str1,str2);
sum.insert(str1);
sum.insert(str2); // 将失败者和胜者都放入sum
fail.insert(str2); // 将失败者放入fail
}
if(sum.size()-fail.size()==1) // 判断能否产生冠军
printf("Yes\n");
else printf("No\n");
sum.clear();
fail.clear(); //释放集合占用的空间
}
return 0;
}