2016-2017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016
Problem G Game Rank
题目链接 http://codeforces.com/gym/101550/attachments
题意:现在你在玩炉石,等级1为最高级,25为最低级,达到0级为传奇,比赛规则如下
晋升规则:
- 每赢一局你可以获得一颗星,如果你是三局连胜及以上可以额外获得一颗星。
- 25-21满2颗星然后再获得星星可以晋级
- 20-16满3颗星然后再获得星星可以晋级
- 15-11满4颗星然后再获得星星可以晋级
- 10-1满5颗星然后再获得星星可以晋级
- 如果你是获得一颗星晋级那么你晋级之后初始星为1颗,获得两颗星晋级那你晋级之后初始星为2颗
降级规则:
- 如果你在1-20级并且没有星星之后输掉比赛你将会降一级,星星变成为下一级的满星状态。
- 20级不会掉到21级去
- 当你变成0级(传奇)之后你将不会再掉级。
我也为传奇啊,为啥我读不懂比赛规则,还读漏了,哎。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
char s[maxn];
int Rank, stars;
int stage(int Rank) {
if (Rank >= 21) {
return 4;
} else if (Rank >= 16 && Rank <= 20) {
return 3;
} else if (Rank >= 11 && Rank <= 15) {
return 2;
} else if (Rank >= 1 && Rank <= 10) {
return 1;
} else {
return 0;
}
};
int main() {
//freopen("1.in", "r", stdin);
scanf("%s", s);
Rank = 25, stars = 0;
int len = int(strlen(s));
for(int i=0;i<len;i++) {
if(Rank == 0)
continue;
if(i >= 2 && s[i] == 'W' && Rank >= 6) {
if(s[i-1] == 'W' && s[i-2] == 'W')
stars += 1;
}
if(s[i] == 'W') {
stars += 1;
if (stage(Rank) == 4 && stars > 2) {
Rank--;
stars -=2;
} else if (stage(Rank) == 3 && stars > 3) {
Rank--;
stars -= 3;
} else if (stage(Rank) == 2 && stars > 4) {
Rank--;
stars -= 4;
} else if (stage(Rank) == 1 && stars > 5) {
Rank--;
stars -= 5;
}
} else {
if(Rank <= 20 && Rank >= 1) {
if(Rank == 20 && stars == 0) continue;
stars--;
if(stars < 0) {
Rank++;
if(stage(Rank) == 4) {
stars = 1;
} else if(stage(Rank) == 3) {
stars = 2;
} else if(stage(Rank) == 2) {
stars = 3;
} else if(stage(Rank) == 1) {
stars = 4;
}
}
}
}
}
if(Rank > 0) {
printf("%d\n", Rank);
} else {
puts("Legend");
}
}