hdu2094产生冠军
来源:互联网 发布:西安市旅游业数据 编辑:程序博客网 时间:2024/05/16 17:13
1.题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2094
2.思路:
可以将左边的看成第一群人,将右边的看成第二群人,左边的就是候选人,右边的不是。题目要求找是否有冠军,有一个就输出Yes,否则就输出No,多个冠军就算没有冠军。
这样,我们就可以在第一群人中找,如果第一群人中在第二群人中有出现,意思就是赢的人也有被打败的比赛,那么这个人就不可能是冠军,从第一群人中删除掉,如果在第二群人中找不到的,冠军人数就加一,最后统计冠军人数,如果大于1,就直接可以判定没有冠军。
其实这题是关于拓扑排序的,但是我觉得这个思路很好,从别人那边看到的,值得一学。
3.参考代码:
#include <stdio.h>#include <string.h>struct player{char win[30],lose[30];};int main(){int i,j,n,ok;player ply[1000];char tmp[30];while(scanf("%d",&n) && n){for(i=0;i<n;i++) ///输入信息scanf("%s %s",ply[i].win,ply[i].lose);for(i=0;i<n;i++) ///从赢的名单中删除输的候选人,即输的候选人不可能成为冠军{for(j=0;j<n;j++){if(!strcmp(ply[i].win,ply[j].lose)){ply[i].win[0]='#';break;}}}ok=0; ///冠军候选的人数tmp[0]='#'; ///候选冠军的名字for(i=0;i<n;i++){if(ply[i].win[0]!='#' && strcmp(ply[i].win,tmp)){ ///如果该冠军没有被删除,并且是冠军候选人ok++; ///冠军人数加一if(ok>1) ///当冠军人数大于1,就知道没有冠军了break;strcpy(tmp,ply[i].win); ///更换候选冠军}}if(ok==1)printf("Yes\n");elseprintf("No\n");}return 0;}
- hdu2094 产生冠军
- hdu2094产生冠军
- HDU2094:产生冠军(模拟)
- hdu2094产生冠军
- HDU2094产生冠军
- HDU2094 产生冠军 【STL】
- hdu2094 产生冠军 (set)
- HDU2094 产生冠军
- hdu2094产生冠军
- hdu2094 产生冠军
- HDU2094---产生冠军
- hdu2094(产生冠军)
- HDU2094:产生冠军
- hdu2094产生冠军
- 【hdu2094】产生冠军
- hdu2094产生冠军
- HDU2094-产生冠军
- HDU2094 产生冠军(容器)
- 初识Shell Scripts编程--最最简单的shell例子
- 2013 多校第三场 hdu 4628 Pieces
- C#初学者——第一个window 应用小程序
- Linux单实例进程
- OC学习之UIButton
- hdu2094产生冠军
- OC学习之UILabel
- 走马灯效果
- 项目日志第N天
- 2013多校联合 3 B Reincarnation (hdu 4622)
- 2012 Asia Chengdu Regional Contest-hdu4472
- ADB使用方法及常用命令
- CreateThread和AfxBeginThread创建线程实例
- UIFont字体