CF399B Red and Blue Balls
题目
思路
很容易发现,栈中靠上的蓝色球的出栈,对它下方的蓝色球没有影响.
举个例子:

第一步中靠上的蓝色球在第三步出栈了,这一过程对它下面的蓝色球(即第一步中靠下的蓝色球)没有产生影响.
这启示我们由上到下分别计算每一颗(初始状态下的)蓝色球出栈需要的步数,再相加得到答案.
不妨设\(f(x)\)表示离栈顶距离为\(x\)的蓝色球出栈需要的步数,那么上面的样例的答案即为\(f(2)+f(3)\),即"离栈顶距离为\(2\)的蓝色球出栈所需步数\(+\)离栈顶距离为\(3\)的蓝色球出栈所需步数".
接下来的问题就是求\(f(x)\)函数的值.
显然\(f(1)=1\),即如果该球在栈顶,出栈需要\(1\)步操作.
考虑更一般的情况,我们会发现一个蓝色球想出栈的第一步,一定是将该蓝色球所在位置变为红色球,再将上方所有红色球变为蓝色球.
例如上面例子中的\("3\rightarrow4"\)这一步,原在从顶到下第三个位置的蓝色球想出栈,第一步就是把从顶到下第三个位置变为红色球,同时把从顶到下第一/二个位置变为蓝色球.
于是可以得到递推方程:
\]
也就是说,从顶到下第\(x\)个位置的蓝色球想出栈,等效于先走一步变为 "\(x\)位置红,\(1...x-1\)位置蓝",再让\(1...x-1\)位置的蓝色球依次出栈.
由于这道题数据范围较小,我们当然可以\(O(n^2)\)计算所有\(f(x)\)的值,但我们也可以推推通项公式.
由递推式,有
\]
所以
\]
\]
\]
所以
\]
所以
\]
实际代码中,需要注意字符串的下标从\(0\)开始.
代码
#include<bits/stdc++.h>
using namespace std;
int n;
long long ans,p;
string s;
int main()
{
cin>>n>>s;
for(int i=0;i<s.size();i++)
{
p= i==0? 1 : p*2;
if(s[i]=='B')
ans+=p;
}
cout<<ans;
return 0;
}
CF399B Red and Blue Balls的更多相关文章
- AC日记——Red and Blue Balls codeforces 399b
399B - Red and Blue Balls 思路: 惊讶的发现,所有的蓝球的消除都是独立的: 对于在栈中深度为i的蓝球消除需要2^i次操作: 代码: #include <cstdio&g ...
- 洛谷 CF399B【Red and Blue Balls】题解
n年没有更博客:我总结出了规律,当学的东西很难得时候都去学习,没有时间写博客,只有 内容对于我这种蒟蒻友好,又让我非常闲的慌时才写博客,这种博客以后也没有价值(也有些是做完一道题有成就感写的) 最近内 ...
- codeforces 399B. Red and Blue Balls 解题报告
题目链接:http://codeforces.com/problemset/problem/399/B 题目意思:给出 n 个只由 R 和 B 组成的字符串(由上到下排列,相当于栈),问最多可以操作多 ...
- Codeforces Round #233 (Div. 2) B. Red and Blue Balls
#include <iostream> #include <string> using namespace std; int main(){ int n; cin >&g ...
- cf B Red and Blue Balls
思路:把字符串转化为一个二进制,遇到B就是一个数二进制中的1,答案就是这个数. #include <cstdio> #include <cstring> #include &l ...
- 微软往年校招招面试题AC全解。
因为4月初要参加微软的online.所以今天把微软的面试题拿出来做了,自己解答了题目.下面附上我的解答代码. -----------16年9月校招: 第一道题:Farthest Point(最远的整 ...
- hihoCoder#1135
刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 The c ...
- 【hihocoder】 Magic Box
题目1 : Magic Box 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 The circus clown Sunny has a magic box. When ...
- hihocoder 1135 : Magic Box
#1135 : Magic Box 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 The circus clown Sunny has a magic box. Whe ...
随机推荐
- Serverless Component 介绍和使用指南
Serverless Component 是什么,我怎样使用它? Serverless Components 的目标是什么? 我们希望通过 Serverless Components 让广大开发者更加 ...
- [USACO19DEC]Tree Depth P
题意 求逆序对为\(k\)的\(n\)排列中,生成的笛卡尔数,每个位置的深度和.\(n\le 300\) 做法 设\(f_{k}\)为\(n\)排列中逆序对为\(k\)的个数,其生成函数为:\[\pr ...
- 项目在UAP可以直接启动,但是在eclipse上面不能直接启动
上面两个eclipse都是用友的开发人员给我的,左边是驻场开发给我的,但是没有教我怎么用和哪里好用,所以一直用UAP来做开发.右边的eclipse是提ISM问题,北京用友远程调试问题时给我的,而且终于 ...
- Oracle 12c 多租户家族(12c 18c 19c)如何在 PDB 中添加 HR 模式
Oracle 12c 多租户家族(12c [12.2.0.1].18c [12.2.0.2].19c [12.2.0.3])如何在 PDB 中添加模式:19c (19.3) 手工添加示例 HR 用户 ...
- Java连载76-基础数据类型包装类型及其方法简介
一.java中八种基本数据类型对应的包装类型 基本数据类型 包装类型 byte java.lang.Byte short ...
- jQuery 判断页面上下滚动
var t = 0, b = 0; $(window).scroll(function(){ t = $(this).scrollTop(); if(b < t){ console.log('向 ...
- 浅谈C#委托的用法-delegate[转]
一.委托的概念 委托和类一样是一种用户自定义类型,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行. 借用百度上的一句话概括:委托是一个类,它定义了方 ...
- asp.net core 自定义基于 HttpContext 的 Serilog Enricher
asp.net core 自定义基于 HttpContext 的 Serilog Enricher Intro 通过 HttpContext 我们可以拿到很多有用的信息,比如 Path/QuerySt ...
- Visual Studio Code搭建Python开发环境方法总结
更新:目前VSCode官方Python插件已经支持代码运行与调试,无需安装Code Runner插件. 1.下载安装Python,地址 https://www.python.org/downloads ...
- leetcode - 01
只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: ...