codeforces 399B. Red and Blue Balls 解题报告

题目链接:http://codeforces.com/problemset/problem/399/B

题目意思:给出 n 个只由 R 和 B 组成的字符串(由上到下排列,相当于栈),问最多可以操作多少轮。一轮包括三个步骤:(1)如果栈顶的球为 red,则弹出(注意可以弹出多个),直到遇到栈顶的球为blue  (2)将这个blue球替换为red球(只操作一次)  (3)在替换完red 球上面添加blue球,直到有 n 个球为止。当然一轮中不一定3个步骤都执行。当 n 个球都为red时,就不能再操作了。

    千万不要直接模拟,会超时的!!!观察可以发现,它实质是考我们位运算!red球代表该位的数为0,blue则代表该位为1。那么只需要对输入的那个字符串,算出二进制数转换成十进制是多少,就是答案了。

    

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 typedef long long LL;
 8 const int maxn = 50 + 5;
 9 char s[maxn];
10 LL ans;
11 
12 int main()
13 {
14     int n;
15     while (scanf("%d", &n) != EOF)
16     {
17         getchar();
18         gets(s);
19         ans = 0;
20         for (int i = 0; i < n; i++)
21         {
22             if (s[i] == 'B')
23                 ans += (1LL << i);
24         }
25         printf("%lld
", ans);
26     }
27     return 0;
28 }
原文地址:https://www.cnblogs.com/windysai/p/3837523.html