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

From:hzwer.com(2014-5-17)

时间:2017-08-03 22:00:22      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:show   操作   rip   return   不能   name   i++   color   turn   

Problem 1 双色球(ball.cpp/c/pas)

【题目描述】

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

 伪题解:

利用dp,找规律就可以水过了(博主用cena出错,就只用了样例与第十组数据比较,应该没问题,如果有,希望读者直接联系我)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 long long n,dp[50],sum=0;
 8 char a;
 9 int main()
10 {
11     dp[0]=1;
12     for(int i=1;i<50;i++)
13         dp[i]=2*dp[i-1]+1;
14     scanf("%lld",&n);
15     cin>>a;
16     if(a==B)
17         sum++;
18     for(int i=1;i<n;i++)
19     {
20         cin>>a;
21         if(a==B)
22         {
23             sum+=dp[i-1];
24             sum++;
25         }
26     }
27     cout<<sum;
28     return 0;
29 }

真题解(from:hzwer)

看完就开始打模拟,数据范围这么小是吧。。然后果断T了

原来是找规律啊。。

把第n个蓝球变成红球要2^n次操作。。然后累加起来,开个longlong

模拟

正解

From:hzwer.com(2014-5-17)

标签:show   操作   rip   return   不能   name   i++   color   turn   

原文地址:http://www.cnblogs.com/mbxxyguss/p/7281728.html

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