​传送门​

题目大意

一个栈内初始有Codeforces 399 B_出栈个红色和蓝色的小球,请你按照以下规则进行操作
Codeforces 399 B_i++_02.只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
Codeforces 399 B_出栈_03.然后将栈顶的蓝球变成红色
Codeforces 399 B_i++_04.最后放入若干个蓝球直到栈中的球数为Codeforces 399 B_出栈
以上Codeforces 399 B_i++_04步骤为一次操作 如栈中都是红色球,则操作停止,请问几次操作后停止 ainta出完题发现他自己不能Codeforces 399 B_出栈_07所以想请你帮忙
Codeforces 399 B_i++_08代表红色,Codeforces 399 B_出栈_09代表蓝色

思路

假设第i个球是蓝色,他变成红色对后面的蓝球没有影响
先做一遍模拟
1.将栈顶的所有红色球取出
2.将此时栈顶的蓝色球变成红色
3.用蓝色球填满空缺
可以发现:找到的第一个蓝球前的所有红球全变蓝了,而这个蓝球变成了红球
所以第i个蓝色球想出栈,等效于先走一步“x位置红,[1,i-1]位置蓝”,再让[1,i-1]依次出栈
Codeforces 399 B_出栈_10Codeforces 399 B_c++_11位置是蓝色球)
Codeforces 399 B_i++_12
所以Codeforces 399 B_出栈_13
Codeforces 399 B_i++_14
所以Codeforces 399 B_i++_15

代码

int n,st[51];
char a[51];
ll ans;
int main()
{
scanf("%d",&n);
scanf("%s",a);
for(int i=1;i<=n;i++)
if(a[i-1]=='R')st[i]=1;
else st[i]=2;
for(int i=1;i<=n;i++)if(st[i]==2)ans+=qpow(i);
printf("%lld",ans);
return 0;
}