• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            /*
            ? Name:6.剪刀石頭布
            ? Copyright:
            ? Author:
            ? Date: 28-05-06 08:51
            ? Description:
            N個小孩正在和你玩一種剪刀石頭布游戲(剪刀贏布,布贏石頭,石頭贏剪刀)。N個小孩中有一個是裁判,其余小孩分成三組(不排除某些組沒有任何成員的可能性),但是你不知道誰是裁判,也不知道小孩們的分組情況。然后,小孩們開始玩剪刀石頭布游戲,一共玩M次,每次任意選擇兩個小孩進行一輪,你會被告知結果,即兩個小孩的勝負情況,然而你不會得知小孩具體出的是剪刀、石頭還是布。已知各組的小孩分別只會出一種手勢(因而同一組的兩個小孩總會是和局),而裁判則每次都會隨便選擇出一種手勢,因此沒有人會知道裁判到底會出什么。請你在M次剪刀石頭布游戲結束后,猜猜誰是裁判。如果你能猜出誰是裁判,請說明最早在第幾次游戲結束后你就能夠確定誰是裁判。

            輸入要求:
            輸入文件包含多組測試數據,每組測試數據第一行為兩個整數N和M(1<=N<=500,0<M<=2000),分別為小孩的個數和剪刀石頭布游戲進行的次數。接下來M行,每行兩個整數且中間以一個符號隔開。兩個整數分別為進行游戲的兩個小孩各自的編號(為小于N的非負整數)。符號的可能值為“=”、“>”和“<”,分別表示和局、第一個小孩勝和第二個小孩勝三種情況。例:
            3 3
            0<1
            1<2
            2<0
            3 5
            0<1
            0>1
            1<2
            1>2
            0<2
            4 4
            0<1
            0>1
            2<3
            2>3
            1 0

            ?

            輸出要求:
            1.每組測試數據輸出一行,若能猜出誰是裁判,則輸出裁判的編號,并輸出在第幾次游戲結束后就能夠確定誰是裁判,小孩的編號和游戲次數以一個空格隔開;
            2.如果無法確定誰是裁判,輸出-2;如果發現剪刀石頭布游戲的勝負情況不合理(即無論誰是裁判都會出現矛盾),則輸出-1。例:
            -2
            1 4
            -1
            0 0

            ?

            評分規則:
            1.程序將運行在一臺Linux機器上(內存使用不作嚴格限制),在每一測試用例上運行不能超過10秒,否則該用例不得分;
            2.要求程序能按照輸入樣例的格式讀取數據文件,按照輸出樣例的格式將運行結果輸出到標準輸出上。如果不能正確讀入數據和輸出數據,該題將不得分;
            3.該題目共有5個測試用例,每個測試用例為一個輸入文件。各測試用例占該題目分數的比例分別為5%、10%、15%、30%和40%;
            4.該題目20分。
            */

            /*
            算法介紹:
            1。如果只有1個人,參加比賽,那么他就是裁判,即輸出:0 0 。
            2。建立數組 players[MAX][MAX] 記錄比賽結果(數組賦初值0),若選手a輸給b,則players[a][b]=1,players[b][a]=3;若打平,則players[a][b]=players[b][a]=2;
            注意:在記錄成績之前,先判斷選手a,b 是否已經比賽過,如果已經比賽過,則判斷先前的比賽結果是否與當前結果相同,若不相同,在數組judger[]中做標記(數組賦初值0),若judger[a]=0,使judger[a]=1,表示a有可能為裁判;若judger[a]=1,則使judger[a]=2,表示a肯定為裁判,因為他和兩個人出現不同結果。
            同理處理b。
            3。遍歷數組judger[],用temp1記錄judger[i]=1出現的次數,用temp2記錄judger[i]=2出現的次數,如果2個或以下的人可能為裁判,且沒有人肯定為裁判,即if (temp1 <= 2 && temp2 == 0),則無法確定誰是裁判;
            如果2個或以下的人可能為裁判,且有1人肯定為裁判,即if (temp1 <= 2 && temp2 == 1),則確定裁判i;
            如果2個以上的人可能為裁判,即if (temp1 > 2),則勝負情況不合理。
            */

            #include <iostream>
            #include<fstream>
            #include <time.h>

            using namespace std;

            const int MAX = 500;
            void Readata(const char *filename);


            int main()
            {
            ?time_t startTime;
            ?time_t endTime;
            ?time(&startTime);

            ?Readata("in.txt");


            ?time(&endTime);
            ?cout << difftime(endTime, startTime) << endl;

            ?getchar();
            ?return 0;
            }

            void Readata(const char *filename)
            {
            ????? fstream in(filename);
            ????? if (!in)
            ??????????? return ;?? //結束程序執行

            ????? while (!in.eof())
            ????? {
            ??????????? int N, M;
            ??????????? in >> N;
            ??????????? in >> M;
            ???????????
            ??????????? if (N == 1) //如果只有1個人,參加比賽,那么他就是裁判
            ????????????????? cout << 0 << ' ' << 0 << endl;
            ?????????????????
            ??????????? int players[MAX][MAX] = {0};//記錄比賽結果
            ??????????? int *judger = new int[N];//記錄是否可能為裁判,0表示不可能,1表示可能,2表示確定
            ??????????? for (int i=0; i<N; i++)
            ????????????????? judger[i] = 0;
            ?????????????????
            ??????????? int n = 0;//累計比賽場數
            ??????????? int min = n;//存儲能夠確定誰是裁判的最少場數
            ??????????? while (!in.eof() && n < M)//讀入比賽結果信息
            ??????????? {
            ????????????????? char data[3]; //存儲比賽選手編號和結果

            ????????????????? in >> data[0];
            ????????????????? in >> data[1];
            ????????????????? in >> data[2];
            ???????????????? // cout << data[0] << ' ' << data[1] << ' ' << data[2] << endl;
            ????????????????? n++;
            ????????????????? int flag = (data[1]=='<')? 1 :((data[1]=='=')? 2 : 3);//分別用1,2,3表示負,平,勝
            ?????????????????
            ????????????????? if (players[data[0]-'0'][data[2]-'0'] == 0)//若a,b未對局過,存儲比賽結果
            ????????????????? {
            ??????????????????????? players[data[0]-'0'][data[2]-'0'] = flag;
            ??????????????????????? players[data[2]-'0'][data[0]-'0'] = 4 - flag;
            ????????????????? }
            ????????????????? else if (players[data[0]-'0'][data[2]-'0'] != flag)//若a,b已對局過,且比賽結果不同
            ????????????????? {
            ??????????????????????? if (judger[data[0]-'0'] == 0) //a有可能為裁判
            ????????????????????????????? judger[data[0]-'0'] = 1;
            ??????????????????????? else if (judger[data[0]-'0'] == 1)//a就是裁判
            ??????????????????????? {
            ????????????????????????????? judger[data[0]-'0'] = 2;
            ????????????????????????????? min = n;
            ??????????????????????? }
            ???????????????????????
            ??????????????????????? if (judger[data[2]-'0'] == 0) //b有可能為裁判
            ????????????????????????????? judger[data[2]-'0'] = 1;
            ??????????????????????? else if (judger[data[2]-'0'] == 1) //a就b是裁判
            ??????????????????????? {
            ????????????????????????????? judger[data[2]-'0'] = 2;
            ????????????????????????????? min = n;
            ??????????????????????? }
            ????????????????? }
            ???????????????? // cout << "players["<<data[0]-'0'<<"]["<<data[2]-'0'<<"]="<<players[data[0]-'0'][data[2]-'0']<<endl;
            ??????????? }
            ??????????? int temp1 = 0; //記錄judger[i]=1出現的次數
            ??????????? int temp2 = 0; //記錄judger[i]=2出現的次數
            ??????????? int answer;
            ??????????? for (int i=0; i<N; i++)
            ??????????? {
            ????????????????? //cout << judger[i] << ' ';
            ????????????????? if (judger[i] == 1)
            ?????????????????????? temp1++;

            ????????????????? if (judger[i] == 2)
            ????????????????? {
            ?????????????????????? temp2++;
            ?????????????????????? answer = i;
            ????????????????? }
            ??????????? }
            ??????????? cout << endl;
            ??????????? if (temp1 <= 2 && temp2 == 0)
            ????????????????? cout << -2 << endl;
            ??????????? else? if (temp1 <= 2 && temp2 == 1)
            ????????????????? cout << answer << ' ' << min << endl;
            ??????????? else? if (temp1 > 2)
            ????????????????? cout << -1 << endl;
            ?????????????????
            ??????????? delete []judger;
            ????? }

            ??? in.close(); //關閉文件
            }

            ?

            Posted on 2006-05-30 13:59 夢想飛揚 閱讀(591) 評論(0)  編輯 收藏 引用
            国产成人精品久久亚洲高清不卡| 久久人人爽人人爽人人片AV不| 久久久久久无码Av成人影院| 国产精品福利一区二区久久| 综合久久给合久久狠狠狠97色| 色欲av伊人久久大香线蕉影院| 亚洲国产另类久久久精品黑人| 亚洲午夜无码久久久久| 免费一级做a爰片久久毛片潮| 女人香蕉久久**毛片精品| 好属妞这里只有精品久久| 久久精品国产亚洲AV高清热| 精品久久久久久国产91| 久久综合色区| 久久亚洲精品中文字幕三区| 一本色道久久综合| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久精品日本一区二区三区| 成人资源影音先锋久久资源网| 久久久久这里只有精品 | 久久精品亚洲福利| 国产精品美女久久久| 久久久WWW成人| 久久久精品国产免大香伊| 青青青国产精品国产精品久久久久| 一级做a爰片久久毛片毛片| 久久精品成人免费网站| 久久99久久99精品免视看动漫| 日韩人妻无码一区二区三区久久| 久久国产精品免费一区二区三区 | 国产午夜福利精品久久2021| 久久无码AV中文出轨人妻| 热久久最新网站获取| 久久播电影网| 精品久久久久久无码中文字幕| 91久久婷婷国产综合精品青草| 久久久久久九九99精品| 久久综合精品国产二区无码| 人妻精品久久久久中文字幕69| 人妻无码久久一区二区三区免费 | 欧美日韩精品久久久久|