1. 程式人生 > >SHUoj 神無月排位賽

SHUoj 神無月排位賽

限制 更新 define 時間 pbo div png 基礎 -m

神無月排位賽

發布時間: 2017年7月8日 21:06 最後更新: 2017年7月8日 22:35 時間限制: 1000ms 內存限制: 128M

《神無月》作為盛大遊戲2017年的全新原創大作,其開發團隊在自研實力強大的傳世工作室基礎之上,還有美樹本晴彥等日本一線知名畫師及日本遊戲音樂大師崎元仁加盟參與制作。目前正在不限號內測中,有很多玩家進入到神無月的世界中。

在神無月中,有著玩家之間切磋的排位賽,其段位主要分為五大段位,從低到高依次為:新兵、菁英、戰將、統帥、王者。每個玩家只有從新兵段位慢慢努力,一點點晉級才能到達王者段位。成為一個王者是每一個玩家的追求和心願。

技術分享

假設神無月的段位系統如下:

從低到高的段位依次簡記為:D、C、B、A、S。玩家打排位賽,每勝利1局增加10分,輸1局扣除5分。每一個段位都需要積分,累計100分才可以進入晉級賽,晉級賽采用三局兩勝制(3局中達到2局勝利就晉級成功,有2局失敗就算晉級失敗, 連勝或連敗兩局,第三局不需要打了)。晉級成功後,成為下一個段位,積分變為0,重新開始算分;如果晉級失敗,則積分變為60,重新開始算分。為方便計算,如果該玩家一直輸,積分降為0後,不再降分,也不會掉段位。

大聖同學最近對神無月非常喜歡,一直在努力成為王者。他從新兵0分開始打排位賽(剛開始處在段位D),他告訴你最近若幹場比賽的最後勝利情況,請你寫個算法猜猜他現在所處的段位。當段位到達S時,段位將不再提高。

有若幹組數據。
每組的第一行為一個N 0<N<500 ),表示有N 場比賽數據。
第二行有N 個數字,每個數字之間有空格隔開,每個數字代表每場比賽的輸贏情況,1 表示贏,0 表示輸。
註意:當第n 場比賽結束時,若大聖同學正處於晉級賽,並且還無法決定晉級成功或失敗,那麽可以忽略這場晉級賽

對於每組比賽數據,輸出最後所處的段位的一個英文字符(D C B A S 這五個段位中的一個)。

復制
15
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
30
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1
C
B
思路:模擬即可,註意打到S段位後將固定在S段位,不再提高或降低
AC代碼:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
const int N_MAX = 500;
int N;
int res[N_MAX];
int main() {
    while (scanf("%d", &N) != EOF) {
        int duanwei = 1, score = 0, time = 0, total = 0;
        bool flag = 0;
        for (int i = 0; i < N; i++) {
            scanf("%d", &res[i]);
        }
        for (int i = 0; i < N; i++) {
            if (!flag) {
                total = time = 0;//晉級賽贏的次數歸位
                if (res[i] == 1) {
                    score += 10;
                    if (score >= 100) {
                        flag = 1;//打晉級賽去了
                    }
                }
                else if (res[i] == 0) {
                    if (score > 5)score -= 5;
                    else score = 0;
                }
            }
            else {//晉級賽    
                total++;
                if (res[i] == 1) {
                    time++;
                    if (time >= 2) { if(duanwei<5)duanwei++; flag = 0; score = 0; continue; }//贏了兩次不用繼續打晉級賽了
                }
                if (total == 2 && time == 0) {//輸了兩場
                    flag = 0; score = 60;
                }
                if (total == 3) { flag = 0; score = 60; }//打了三場的情況,沒晉級
            }
        }
        switch (duanwei) {
        case 1:printf("D\n");
            break;
        case 2:printf("C\n");
            break;
        case 3:printf("B\n");
            break;
        case 4:printf("A\n");
            break;
        case 5:printf("S\n");
            break;
        }
    }
    return 0;
}

SHUoj 神無月排位賽