hdu 2094 产生冠军

来源:互联网 发布:jsonobject转java对象 编辑:程序博客网 时间:2024/05/18 01:01

本题链接:点击打开链接

本题大意:

        有n名队员,已知每名队员打比赛的输赢,问,能否据此确定冠军。

解题思路:

        就是将所有比赛中失败过的做标记,据题知:失败过的就不可能再成为冠军,所以就看最后未标记的有几个,若只有一个,则说明其就是所认定的冠军,否则就确定不了冠军。主要是字符串难处理,具体请参见代码:

#include<stdio.h>#include<string.h>char str[1010][100];char win[100],lose[100];int mark[1010];int main(){int n,i,sum;while(scanf("%d",&n),n){i=0;memset(mark,0,sizeof(mark)); while(n--){int flagw=0,flagl=0;//flagw 标记出现过的赢者,flagl标记出现过的输者 scanf("%s%s",win,lose);if(i==0){strcpy(str[i++],win);strcpy(str[i++],lose);mark[i-1]=1;//mark loser;}else{for(int j=0;j<i;j++){if(strcmp(str[j],win)==0)flagw=1;//标记已登记过的winerif(strcmp(str[j],lose)==0){mark[j]=1;//标记输者 flagl=1;//标记已登记过的loser }}if(!flagw)strcpy(str[i++],win);if(!flagl){strcpy(str[i++],lose);mark[i-1]=1;}}}sum=0;for(int j=0;j<i;j++){if(mark[j]==0)//查找未被标记过的 sum++;}if(sum!=1)//若有多个未被标记,则无法确定冠军 printf("No\n");elseprintf("Yes\n");}return 0;}


 

0 0
原创粉丝点击