题目好长,放链接吧 http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2018
【分析】
- 题目读了好久才懂,就是有不同的等级,满星后升级并加星
- 玩家赢得比赛,他会获得一个星 在6 - 25级之间连续三连胜以上,他可以获得一个额外的星星,当前的星超过了当前等级的限制的时候就会上升一个等级
- 输了一场比赛,他就失去了一颗星,如果玩家在当前排名是零星,失去一颗星后,那么他将失去一个等级,然后得到在下面的排名中满星减去一个的数量的星。
- 二十级0星的时候输不会掉星星。
- 如果达到了Legend等级的时候就再输都不会掉级了。
- 这题是Special Judge。有一个比较坑的点就是那个连胜的判断是在该盘加星之前的。(参考:https://blog.csdn.net/yyy_3y/article/details/78461491)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char s[10005];
int main(){
int rank[30] = {5,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,0,0,0,0};
while (~scanf("%s",s))
{
int l=strlen(s);
int r=25,cnt=0;
for (int i=0;i<l;i++)
{
if (s[i]=='W')
{
cnt++;
if (i>1&&s[i-1]=='W'&&s[i-2]=='W'&&r>=6)
cnt++;
if (cnt>rank[r])
{
cnt-=rank[r];
r--;
}
}
else if(s[i]=='L')
{
if (r>20||r==20&&cnt==0)//大于20级的输了不扣分
continue;
cnt--;
if (cnt < 0)
{
r++;
cnt = rank[r] - 1;
}
}
if (r == 0)
break;
// cout<<"r="<<r<<",cnt="<<cnt<<endl;
}
if (r)
cout<<r<<endl;
else
cout<<"Legend"<<endl;
}
return 0;
}