360校招——最后贏家(C++)

? 文章鏈接: www.mengyingjie.com/archives/39/ ?

最后贏家

時(shí)間限制:C/C++語(yǔ)言 1000MS;其他語(yǔ)言 3000MS
內(nèi)存限制:C/C++語(yǔ)言 65536KB;其他語(yǔ)言 589824KB

題目描述:

最強(qiáng)的不一定是最后的贏家。

某賽事有n名選手參加,但是不同于其他的比賽,本比賽采取的是擂臺(tái)賽的形式,n名選手排成一排,每次隊(duì)伍的第一位和第二位選手進(jìn)行比賽,輸?shù)囊环綍?huì)排到隊(duì)尾。

當(dāng)某位選手取得m連勝時(shí),他將成為最后的贏家,且游戲結(jié)束,請(qǐng)問(wèn)截止到游戲結(jié)束,共會(huì)進(jìn)行多少次比賽。

兩位選手的比賽結(jié)果由他們的戰(zhàn)斗力決定,n位選手的戰(zhàn)斗力是一個(gè)1~n的排列,也就是說(shuō)他們的戰(zhàn)斗力兩兩不同,不會(huì)有平局的情況。

輸入

輸入第一行包含兩個(gè)正整數(shù)n,m,分別代表參賽選手?jǐn)?shù)量和取得連勝的要求。(1<=n<=100000,1<=m<=10^9)

輸入第二行包含n個(gè)正整數(shù),中間用空格隔開(kāi),第i個(gè)數(shù)表示隊(duì)伍的第i位選手的戰(zhàn)斗力,整體是一個(gè)1~n的排列。

輸出

輸出僅包含一個(gè)正整數(shù),表示截止到游戲終止,共進(jìn)行多少場(chǎng)比賽。

樣例輸入

4 2
1 3 2 4

樣例輸出

2

提示

樣例解釋
顯然第一局應(yīng)該是戰(zhàn)斗力為3的選手獲勝,第二局同樣是戰(zhàn)斗力為3的選手獲勝,2連勝終止游戲,所以答案是2。此時(shí)若修改m為3,則結(jié)果是5。

代碼

解題思路寫(xiě)在代碼的注釋里

#include <iostream>
#include <queue>

using namespace std;

int main(){
    //n,m,分別代表參賽選手?jǐn)?shù)量和取得連勝的要求
    //cnt記錄作為基準(zhǔn)選手的勝場(chǎng)數(shù)
    int n, m, h, y, cnt;
    //cnt2表示共進(jìn)行了多少場(chǎng)比賽
    int cnt2 = 0;
    //定義隊(duì)列來(lái)存儲(chǔ)每位選手的戰(zhàn)斗力
    queue <int> q;
    cin >> n >> m;
    for(int i = 0; i < n; i++){
        //將戰(zhàn)斗力存儲(chǔ)在隊(duì)列中
        cin >> h;
        q.push(h);
    }
    //取出第一個(gè)隊(duì)列當(dāng)作基準(zhǔn)
    h = q.front();
    q.pop();
    //默認(rèn)勝場(chǎng)為零
    cnt = 0;
    while(cnt < m){
        //一次循環(huán)代表進(jìn)行一場(chǎng)比賽
        cnt2 ++;
        y = q.front();
        //將基準(zhǔn)h與現(xiàn)在隊(duì)首的y相比較
        if(h > y){
            //如果h勝了,他繼續(xù)當(dāng)基準(zhǔn),然后他的勝場(chǎng)+1
            cnt++;
            //將隊(duì)首的y取出,放到隊(duì)列
            q.pop();
            q.push(y);
        }
        else{
            //如果y勝了,把原來(lái)的h放到隊(duì)尾,然后將y作為基準(zhǔn),他的勝場(chǎng)置為1,
            q.pop();
            q.push(h);
            h = y;
            cnt = 1;
        }
    }
    cout << cnt2 << endl;
    return 0;
}

遇到此類問(wèn)題,但看了文章還是未解決,
評(píng)論或加 QQ:781378815

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 4,092評(píng)論 0 2
  • 地址:2017年校招全國(guó)統(tǒng)一模擬筆試(第三場(chǎng))編程題集合 變換次數(shù) (AC) 牛牛想對(duì)一個(gè)數(shù)做若干次變換,直到這個(gè)...
    faremax閱讀 1,010評(píng)論 0 1
  • 計(jì)算機(jī)二級(jí)C語(yǔ)言上機(jī)題庫(kù)(南開(kāi)版) 1.m個(gè)人的成績(jī)存放在score數(shù)組中,請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,643評(píng)論 1 42
  • A 本周的算法題,給定一個(gè)num,求0~num所有數(shù)二進(jìn)制表示后,各數(shù)字中'1'的個(gè)數(shù)。 2的正整數(shù)冪轉(zhuǎn)化為二進(jìn)制...
    shirakiko閱讀 224評(píng)論 0 1
  • 這個(gè)“洗澡”不是給自己洗,而是給小貓們洗澡。 這個(gè)澡洗得可不一般,如果你一不小心,就會(huì)有被貓抓傷的危險(xiǎn),只要一不小...
    啦啦zq閱讀 146評(píng)論 0 1

友情鏈接更多精彩內(nèi)容