AHSOFNU NOIP模拟题-3 T1/Codeforces 399B(找规律)

通过样例解释图,发现这个栈底至上,蓝色的球是二进制中的$1$,红色的球是二进制中的$0$
然后发现这个过程就是二进制数不断减一的过程,也就是说这题就是把输入的二进制转为十进制就行了。
第二个样例就是$0110->0101->0100->0011->0010->0001->0000$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ms(i, j) memset(i, j, sizeof i)
#define LL long long
#define FN2 "ball"
using namespace std;
const int MAXN = 50 + 5;
int n;
char ch[MAXN];
void clean() {}
void solve() {
clean();
LL ans = 0, s = 1;
scanf("%s", ch+1);
for (int i=1;i<=n;i++) {
if (ch[i]=='B') ans += s;
s *= 2;
}
printf("%I64d", ans);
}
int main() {
freopen(FN2".in", "r", stdin); freopen(FN2".out", "w", stdout);
scanf("%d", &n), solve();
fclose(stdin); fclose(stdout);
return 0;
}

Problem 1 双色球
【题目描述】
机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233
“来来来,学弟,我考你道水题检验一下你的水平……”
一个栈内初始有n个红色和蓝色的小球,请你按照以下规则进行操作

  1. 只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
    2.然后将栈顶的蓝球变成红色
    3.最后放入若干个蓝球直到栈中的球数为n
    以上3步骤为一次操作
    如栈中都是红色球,则操作停止,请问几次操作后停止
    chenzeyu97出完题发现他自己不能AC所以想请你帮忙
    【输入格式】
    第一行为一个整数n,表示栈的容量为n
    第二行为一个字符串,第i个字符表示自顶向下的第i个球的颜色,R代表红色,B代表蓝色
    【输出格式】
    一个整数表示操作数
    【样例输入】
    样例1:
    3
    RBR
    样例2:
    4
    RBBR
    【样例输出】
    样例1:2
    样例2:6
    【数据范围】
    50%的数据,1<=n<=20
    100%的数据,1<=n<=50
------ 本文结束 ------