【模拟】Game Rank CSU - 2018 (打怪升级)

【模拟】Game Rank CSU - 2018 (打怪升级)

Time limit 1000 ms Memory limit 131072 kB Source NCPC2016


The gaming company Sandstorm is developing an online two player game. You have been asked to implement the ranking system. All players have a rank determining their playing strength which gets updated after every game played. There are 25 regular ranks, and an extra rank, “Legend”, above that. The ranks are numbered in decreas- ing order, 25 being the lowest rank, 1 the second highest rank, and Legend the highest rank.

Each rank has a certain number of “stars” that one needs to gain before advancing to the next rank. If a player wins a game, she gains a star. If before the game the player was on rank 6-25, and this was the third or more consecutive win, she gains an additional bonus star for that win. When she has all the stars for her rank (see list below) and gains another star, she will instead gain one rank and have one star on the new rank.

For instance, if before a winning game the player had all the stars on her current rank, she will after the game have gained one rank and have 1 or 2 stars (depending on whether she got a bonus star) on the new rank. If on the other hand she had all stars except one on a rank, and won a game that also gave her a bonus star, she would gain one rank and have 1 star on the new rank. If a player on rank 1-20 loses a game, she loses a star. If a player has zero stars on a rank and loses a star, she will lose a rank and have all stars minus one on the rank below. However, one can never drop below rank 20 (losing a game at rank 20 with no stars will have no effect).

If a player reaches the Legend rank, she will stay legend no matter how many losses she incurs afterwards. The number of stars on each rank are as follows:

• Rank 25-21: 2 stars

• Rank 20-16: 3 stars

• Rank 15-11: 4 stars

• Rank 10-1: 5 stars

A player starts at rank 25 with no stars. Given the match history of a player, what is her rank at the end of the sequence of matches?
Input
There will be several test cases. Each case consists of a single line describing the sequence of matches. Each character corre- sponds to one game; ‘W’ represents a win and ‘L’ a loss. The length of the line is between 1 and 10 000 characters (inclusive).

Output
Output a single line containing a rank after having played the given sequence of games; either an integer between 1 and 25 or “Legend”.

Sample Input
WW
WWW
WWWW
WLWLWLWL
WWWWWWWWWLLWW
WWWWWWWWWLWWL
Sample Output
25
24
23
24
19
18

题意:
打怪升级游戏,总共有25个等级,赢一局游戏可以获得一颗星星,若在等级6(含6)以下,连续赢3及以上,可以获得一颗额外星星。等级20(含20)以上,失败一次,失去一颗星星。

注意:赢得星星时,若星星满了该rank,不提升等级,只有再获得星星(即超过时),才能升级,并将获得的星星积累在新等级。同理,失去星星时,若该rank空了,不降级,只有再多失去星星时,才会降级。

思路:
用一个数组记录每rank中星星的要求,按照题意来模拟每一次操作。【不要连续多个LW,一个一个判断!否则容易出错】。

AC代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>

using namespace std;

int star[26] = {0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2};


int main()
{
    string s;
    while(cin>>s)
    {
        int flag = 0;
        int rk = 25, sum = 0, lx = 0, cnt;
        int len = s.length();
        for(int i = 0; i < len; i++)
        {
            cnt = 0;
            if(s[i] == 'W')
            {
                lx++;
                cnt++;
                if(rk >= 6 && lx >= 3)
                    cnt++;
            }
            else
            {
                lx = 0;
                if(rk <= 20)
                    cnt--;
            }
            sum += cnt;
            if(sum > star[rk])
            {
                sum -= star[rk];
                rk--;
                if(rk == 0)
                {
                    flag = 1;
                    printf("Legend\n");
                    break;
                }
            }
            if(sum < 0)
            {
                if(rk == 20)
                {
                    sum = 0;
                    continue;
                }
                rk++;
                sum += star[rk];
            }
        }
        if(!flag)
            printf("%d\n", rk);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Floraqiu/article/details/81206928