1. 程式人生 > >產生冠軍(杭電ACM2094)

產生冠軍(杭電ACM2094)

Problem Description 有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。
球賽的規則如下:
如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那麼就認定,A一定能打敗C。
如果A打敗了B,B又打敗了C,而且,C又打敗了A,那麼A、B、C三者都不可能成為冠軍。
根據這個規則,無需迴圈較量,或許就能確定冠軍。你的任務就是面對一群比賽選手,在經過了若干場撕殺之後,確定是否已經實際上產生了冠軍。

Input 輸入含有一些選手群,每群選手都以一個整數n(n<1000)開頭,後跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝後者。如果n為0,則表示輸入結束。

Output 對於每個選手群,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。

Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
Sample Output Yes No 附上題目連線:
題目連線~

解題思路: 先把所有比賽的所有人都預設為贏了對手,然後將所有的參加比賽的隊員的數目記錄下來,然後將失敗的隊員的個數記錄下來,然後將失敗的人的預設值修改,將所有人減去失敗的人數的個數,如果等於1,說明有唯一的一個冠軍,否則就沒有。

附上 程式碼 :

#include<stdio.h>
#include<string.h>

int main()
{
    char make[1020][60]; //來記錄輸入的人
    int  make1[1020];	 //記錄相對應的狀態
    char a[60];
    char b[60];
    int n,loser,sum,i,temp;
    while(scanf("%d",&n)!=EOF)
    {
        getchar();
        memset(make1,0,sizeof(make1));//先預設所有的都是成功(0代表成功)的  memset只能初始化為0或者-1 初始化1可以用fill
        sum=0;loser=0;	      //記錄總共的人數  和 失敗的人數
        if(n==0)
            break;
        while(n--)
        {
            scanf("%s %s",a,b);
            for(i=0;i<sum;i++)//判斷在原陣列中是否有當前的人名
            {
                if(strcmp(make[i],a)==0)
                    break;
            }
            if(i>=sum)//沒有的話加入到陣列 
            {
                strcpy(make[i],a);  
                sum++;
            }
            for(i=0;i<sum;i++)//判斷是否有當前輸入的人名沒有的話加入
            {
                if(strcmp(make[i],b)==0)
                {
                    make1[i]=1;  //存在的話更改狀態
                    break;
                }
            }
            if(i>=sum)
            {
                strcpy(make[i],b);  
                make1[i]=1;
                sum++;
            }
        }
        for(i=0;i<sum;i++)//判斷有多少更改狀態的
            if(make1[i]==1)
                loser++;
        if(sum-loser==1)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}


相關推薦

產生冠軍(ACM2094)

Problem Description 有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。 球賽的規則如下: 如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那麼就認定,A一定能打敗C。 如果A打敗了B,B又打敗了C,而且,C又打敗了A,那麼

---2094 產生冠軍

Problem Description  有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。 球賽的規則如下: 如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那麼就認定,A一定能打敗C。 如果A打敗了B,B又打敗了C,而且,C又打敗了A,那麼A、

產生冠軍

有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。 球賽的規則如下: 如果A打敗了B,B又打敗了C,而A與C之間沒有進行過比賽,那麼就認定,A一定能打敗C。 如果A打敗了B,B又打敗了C,而且,C又打敗了A,那麼A、B、C三者都不可能成為冠軍。 根據這個規則,無需迴圈較量,或

1170

簡單 == while tail pan 分代 out set 初始 就是個簡單的if else判斷功能的水題目 思路 :就是讀取、計算、利用判斷語句 難點:我在做的時候判斷是否是浮點小數那邊出了點問題,因為我初始設置是double 所以輸出的時候我強制類型轉化為int 這

2018母牛的故事

處理 代碼 [1] out ++ program clas desc col program description 有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請編程實現在第n年的時候,共有多少頭母牛? input 輸入數據

1024----Max Sum Plus Plus

int oid max art main 杭電 sca ava 最大 1 /* 2 這題還沒有理解透徹。某個dalao也不寫註釋。只能自己理解了。。。 3 先求為i個元素(1<=i<=M)為一個區間的最大和,保證元素個數大於等於i個,遞推到M個即可 4

2016數列有序

break col iostream ios 空格 討論 pan include span #include<iostream>using namespace std;int main(){   int n,m,t = 0;   int a[110], b[11

2629 Identity Card

input 比較 題目 開始 ret targe str 部分 還要   題目意思很簡單,就是根據身份證號碼來確定一個人的籍貫和生日,(然而我開始腦子抽了還以為還要根據奇數偶數判斷男女233333)。   然後我的暴力ac代碼:    1 #include <io

1176 免費餡餅

sizeof 提示 () tom 一個 行為 cpp 多少 inpu http://acm.hdu.edu.cn/showproblem.php?pid=1176 免費餡餅 Time Limit: 2000/1000 MS (Java/Others) Memo

女生賽1003

%d 個數 ns2 nbsp 告訴 一句話 pan return spa 題意:給一個序列,刪除一個數,令這個序列的gcd最大 思路:求出原始序列的gcd=g,然後從左邊跑一遍gcd,如果gcd==c 標記 r,那麽a[r] 肯定和前面某個數的gcd為 c , 再從r開始完

2013 猴子吃桃 遞歸解法&循環解法

遞歸解法 algo std include algorithm ota 再次 using turn 題目估計看到過3次不止了,所以還是想復習下遞歸的運用。 奉上遞歸代碼: #include <iostream> #include<math.h> #

女生賽1001 1002 1003 1005 1008 hdu6023 6024 6025 6027 6030

node ace std ret != power tac ns2 clas 代碼先貼這裏 #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string

2023 求平均成績(及一些易見的錯誤)

競賽 斷點 sco ani 今天 new 沒有 math 的人   鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2023   首先,想說下,這題對我來說可能是一個陰影。因為在自己學校的程序競賽中,這是第二題,當時自己

2021發工資題

bsp dal 心算 name end return main spa 貪心算法 本菜雞聽dalao說這是簡單的貪心算法;加油吧菜雞 #include<iostream>using namespace std;int main(){ int n, m, an

HDU Today HDU2112【Dijkstra || SPFA】

esc 眼神 inpu mark 數據 auto 結束 性格 以及 http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 經過錦囊相助,海東集團最終度過了危機,從此。HDU的發展就

1863 暢通project

onos mon string.h ott oid 評估 iss 每一個 -s 暢通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T

HDU 4920(多校訓練#5 1010 題) Matrix multiplication(不知道該掛個什麽帽子。。。)

預處理 ica ref 循環 ring sca esp 題解 code 題目地址:HDU 4920 對這個題簡直無語到極點。。。竟然O(n^3)的復雜度能過。。。。方法有三。。 1:進行輸入優化和輸出優化。。(前提是你的輸入優化不能太搓。。。) 2:利用緩存優化。。詳情

HDU 4968(多校#9 1009題)Improving the GPA (瞎搞)

popu 推斷 imp 暴力枚舉 pop ++ pos nan sin 題目地址:HDU 4968 這題的做法是全部學科的學分情況枚舉,然後推斷在這樣的情況下是否會符合平均分。直接暴力枚舉就可以。 代碼例如以下: #include <cstring> #i

Advanced Fruits HDU1503【LCS的保存】

style pro cte rac data- sequence return arch its Problem Description The company "21st Century Fruits" has specialized

2031 進制轉換

panel 兩個 mem title 轉換成 ron 轉換 () 進制 進制轉換 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss