码迷,mamicode.com
首页 > 其他好文 > 详细

NOIP模拟赛 双色球

时间:2016-10-24 20:58:35      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:color   ble   cin   表示   .com   中学   include   双色球   蓝球   

【题目描述】

    机房来了新一届的学弟学妹,邪恶的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

【样例解释】

样例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模拟赛 双色球

标签:color   ble   cin   表示   .com   中学   include   双色球   蓝球   

原文地址:http://www.cnblogs.com/InWILL/p/5994254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!