首页 > 代码库 > SHUoj 神无月排位赛

SHUoj 神无月排位赛

神无月排位赛

发布时间: 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时,段位将不再提高。

有若干组数据。
每组的第一行为一个0<N<500  ),表示有 场比赛数据。
第二行有 个数字,每个数字之间有空格隔开,每个数字代表每场比赛的输赢情况, 表示赢, 表示输。
注意:当第 场比赛结束时,若大圣同学正处于晋级赛,并且还无法决定晋级成功或失败,那么可以忽略这场晋级赛

对于每组比赛数据,输出最后所处的段位的一个英文字符( 这五个段位中的一个)。

复制
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 神无月排位赛