zoukankan      html  css  js  c++  java
  • 产生冠军(王道)

    题目描述:

    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
    球赛的规则如下:
    如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
    如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
    根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。

    输入:

    输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。

    输出:

    对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。

    样例输入:
    3
    Alice Bob
    Smith John
    Alice Smith
    5
    a c
    c d
    d e
    b e
    a d
    0
    样例输出:
    Yes
    No
     1 #include <iostream>
     2 #include<vector>
     3 #include<map>//要使用map,必须包含此头文件
     4 #include<string>
     5 #include<queue>
     6 using namespace std;
     7 
     8 map<string,int> M;//定义完成从string到int映射的map
     9 int in[2002];
    10 int main()
    11 {
    12     int n;
    13     while(scanf("%d",&n)!=EOF){
    14         for(int i=0;i<2*n;i++)//n组胜负关系,至多存在n个队伍
    15             in[i]=0;//初始化入度
    16         M.clear();//清空一个map
    17         int idx=0;//下一个被映射的数字
    18         for(int i=0;i<n;i++){
    19             char str1[50],str2[50];
    20             scanf("%s%s",str1,str2);
    21             string a=str1,b=str2;
    22             int idxa,idxb;
    23             if(M.find(a)==M.end()){//map中没有对a的映射
    24                 idxa=idx;
    25                 M[a]=idx;//设定其映射为idx
    26                 idx++;//递增idx
    27             }
    28             else
    29                 idxa=M[a];//直接读出该映射
    30             if(M.find(b)==M.end()){
    31                 idxb=idx;
    32                 M[b]=idx;
    33                 idx++;
    34             }
    35             else
    36                 idxb=M[b];
    37             in[idxb]++;//b的入度递增
    38         }
    39         int cnt=0;
    40         for(int i=0;i<idx;i++){//统计入度为0的个数
    41             if(in[i]==0)
    42                 cnt++;
    43         }
    44         puts(cnt==1?"YES":"NO");//入度为0的点唯一说明有冠军
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    MySQL之数据的备份与还原
    调用、查看、修改、删除存储过程和函数
    变量的使用、游标的使用、流程控制的使用
    存储过程与函数
    elementUI 表格设置表头样式
    oracle先排序再分页
    postgresql行转列
    crosstab(unknown, unknown) does not exist
    sublime安装php_beautifier来格式化PHP代码
    从今天开始我要经常更新博客
  • 原文地址:https://www.cnblogs.com/xym4869/p/8634646.html
Copyright © 2011-2022 走看看