首页 > 代码库 > NOIP模拟赛 双色球
NOIP模拟赛 双色球
【题目描述】
机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233
“来来来,学弟,我考你道水题检验一下你的水平……”
一个栈内初始有n个红色和蓝色的小球,请你按照以下规则进行操作
- 只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
- 然后将栈顶的蓝球变成红色
- 最后放入若干个蓝球直到栈中的球数为n
以上3步骤为一次操作
如栈中都是红色球,则操作停止,请问几次操作后停止
chenzeyu97出完题发现他自己不能AC所以想请你帮忙
【输入格式】
第一行为一个整数n,表示栈的容量为n
第二行为一个字符串,第i个字符表示自顶向下的第i个球的颜色,R代表红色,B代表蓝色
【输出格式】
一个整数表示操作数
【样例输入】
样例1:
3
RBR
样例2:
4
RBBR
【样例输出】
样例1:2
样例2:6
【样例解释】
样例1:
样例2:
【数据范围】
50%的数据,1<=n<=20
100%的数据,1<=n<=50
这年头OIer都开始买彩票了。。。
普通高中学生高一就会的数列题
设数列An,表示当n个球全是蓝色时,将它们全部变成红色球需要的操作次数
显然
An=2An-1+1 ===» An=2n-1
设i为蓝色球号码数(自顶向下1~n)
F(i)=Ai-1+1
ans=∑F(i)={2i-1}
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 int n,cnt=0; 6 int s[51]; 7 long long ans; 8 9 int main()10 {11 cin>>n;getchar();//滤空格12 for(int i=1;i<=n;i++)13 {14 char ch=getchar();15 if(ch==‘B‘) s[++cnt]=i;16 }17 for(int i=1;i<=cnt;i++)18 {19 ans+=(long long)pow((double)2,s[i]-1);20 }21 cout<<ans<<endl;22 return 0;23 }
NOIP模拟赛 双色球
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。