题目

题目描述:

众所周知的是Dr.Bai 穷困潦倒负债累累,最近还因邦邦的出现被班上的男孩子们几乎
打入冷宫,所以Dr.Bai 决定去打工赚钱。

Dr.Bai 决定做玩♂球的工作,工作内容如下。

老板提供一根圆筒,里面随意的放着n 个球
仅有粉红色和蓝色。

因为老板喜欢粉红色,于是他要求Dr.Bai进行操作使得筒内只有粉红色球,而操作也有规定,将一下三个步骤算作一次操作:

  1. 将顶端的粉色球弹出,直到是蓝色球。

  2. 然后把第一个蓝色球变成可爱的粉红色。

  3. 向筒里面扔蓝色球,直到球的数量又是优美的n。

然而斤斤计较精打细算的Dr.Bai 想要知道他最少多少次操作使得任务完成,这样的话
Dr.Bai 就能去摸鱼了

可是Dr.Bai 心里只有更高更妙的物理,所以Dr.Bai 请你来帮他计算次数。

输入格式

输入为两行,第一行为一个正整数n(代表球的数量)

第二行为长为n 仅由BP 组成的字符串。

输出格式

输出仅一行,为一个正整数m(代表最少使得筒内仅有粉红色球的操作数)

样例

输入

4
PBBP

输出

6

数据范围

对于20%的数据:1<=N<=10

对于30%的数据:1<=N<=20

对于100%的数据:1<=N<63


思路

部分分

很明显的就是纯模拟,也比较好打,时间复杂度是 O(2n)

正解

将状态二进制化后……我们就能找规律了。

  • 其实好像叫做模拟计数问题,但是我觉得就是找规律
    在自栈顶向下的第 k 个位置上的蓝球变为粉球的代价是 2k-1次。
    对于整体的栈,我们进行单独思考,对仅有第一个球为 P 时操作数为 1,那么仅有第 N
    个球为 B 时,前面的 P 球被弹出,第 N 个球变为 P,又填入了 N-1 个 B 球。

  • 接下来的问题就是将前面的 N-1 个 B 球转化掉。
    于是从栈底往栈顶推,保证栈底开始向上连续个球全部变为 P,之后就不需要再对这
    连续个 P 球操作,问题就变为子问题。

  • 然后对于第 N 个为 B 的球的操作数,等于前面 N-1 个球转化的操作数之和加上自己
    为 1 的操作数,可以推出 1,2(1+1),4(1+2+1),8(1+2+4+1)……
    所以知道了对于任意一种只有一个 B 球的情况的操作数

  • 接下来需要证明彼此间不能互相影响(注意点 1),于是答案就是里面所有为 B 的球
    的操作数之和。

  • 那么程序上的实现就是很简单的二进制转十进制了。

要注意两个点。

1.意识到蓝球不会对彼此产生影响,因为可见使得蓝球变为粉球,仅有操作中的第
二步,那么当一个蓝球 可以发生改变的时候,他之前的蓝球定然已经全部转化成
粉球了,同理它的转化也不会影响到之后的蓝球的转化,因此才能确定最后答案
是各个蓝球的代价数之和,即转化为二进制后直接转为十进制作为答案。

2.这是个栈!所以要注意加入的顺序,最后转化的二进制串是和输入反过来的


代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char s[70],a[70]={0};
int n;
int main(){
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
int n;
scanf("%d",&n);
scanf("%s",s);
for(register int i=0;i<n;++i) if(s[i]=='B') a[i]++;
long long ans=0;
for(register int i=0;i<=n;++i) {
if(a[i])
ans+=pow(2,i);
}
printf("%lld",ans);
return 0;
}

【题解】ball 数论的更多相关文章

  1. POJ 1845-Sumdiv 题解(数论,约数和公式,逆元,高中数学)

    题目描述 给定A,B,求A^B的所有因数的和,再MOD 9901 输入 一行两个整数 A 和 B. 输出 一行,一个整数 样例输入 2 3 样例输出 15 提示 对于100%的数据满足:0 <= ...

  2. UVA571Jugs题解--简单数论(其实是瞎搞)

    题目链接 https://cn.vjudge.net/problem/UVA-571 分析 刚做了道倒水问题的题想看看能不能水二倍经验,结果发现了这道题 题意翻译:https://www.cnblog ...

  3. Codeforces 515C 题解(贪心+数论)(思维题)

    题面 传送门:http://codeforces.com/problemset/problem/515/C Drazil is playing a math game with Varda. Let’ ...

  4. luoguP1082 同余方程 题解(NOIP2012)(数论)

    luoguP1082 同余方程 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include& ...

  5. 【BZOJ4173】数学 题解(数论)

    前言:体验到了推式子的快感orz 题目大意:求$\varphi(n)*\varphi(m)*\sum_{n\ mod\ k+m\ mod\ k\geq k} \varphi(k)\ mod\ 9982 ...

  6. 2017年浙江理工大学程序设计竞赛校赛 题解&源码(A.水, D. 简单贪心 ,E.数论,I 暴力)

    Problem A: 回文 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1719  Solved: 528 Description 小王想知道一个字 ...

  7. Bzoj 3505: [Cqoi2014]数三角形 数论

    3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits   Description

  8. Tsinsen A1504. Book(王迪) 数论,贪心

    题目:http://www.tsinsen.com/A1504 A1504. Book(王迪) 时间限制:1.0s   内存限制:256.0MB   Special Judge 总提交次数:359   ...

  9. 「POJ3696」The Luckiest number【数论,欧拉函数】

    # 题解 一道数论欧拉函数和欧拉定理的入门好题. 虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧. 首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\ ...

随机推荐

  1. 在服务器上使用 smart http 搭建 Git 服务器

    前言 最近一直在写 django 网页的代码,随着代码的量越来越大,管理起来也有点复杂(当然,有在使用 git 进行代码管理).同时由于有不同的工作环境,有些工作环境对 ssh 的访问有限制,所以想到 ...

  2. 从刚毕业的5K测试到20K测试大佬,与薪资相匹配的永远是实力!

    有个话题"软件测试的工资高还是开发者的工资高?"软件测试和软件开发门槛有差异,在职业起步阶段收入也会有一定的差异,这算是行业内公开的秘密.但随着工作年限的增加,经验的逐步积累,软件 ...

  3. Git 系列教程(8)- 远程仓库的使用

    查看远程仓库 如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令,它会列出你指定的每一个远程服务器的名称 如果是刚 clone 下来的自己的库,能看到 origin,这是 Gi ...

  4. 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出

    目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...

  5. 【转载】远程桌面协议浅析(VNC/SPICE/RDP)

    远程桌面协议浅析(VNC/SPICE/RDP) 2016年05月14日 01:27:06 wait_for_that_day5 阅读数:18317 标签: VNCRDPSPICE 更多 个人分类: 工 ...

  6. Linux_rpm包管理

    一.rpm包命令规范 1.包的组成 主包:bind-9.7.1-1.el5.i586.rpm 子包:bind-libs-9.7.1-1.el5.i586.rpm bind-utils-9.7.1-1. ...

  7. nginx官方源安装-主配置文件详解

    HTTP相关术语 PV : Page Visit 页面独立浏览量,查看日志生成条数可以看到PV数量. PV全称Page View,中文翻译即页面浏览.其具体的度量方法是从浏览器发出一个对网络服务器的请 ...

  8. HDFS 的内存存储是什么?

    引言 HDFS 的定位就是一个文件系统,用于存储文件,而 HDFS 对于文件的存储方式有两种: 内存存储 异构存储 内存存储 什么是内存存储? 首先,我们来了解一下到底什么是 "内存存储&q ...

  9. Linux服务之cobbler批量部署篇

    一.Cobbler简介:Cobbler通过将设置和管理一个安装服务器所涉及的任务集中在一起,从而简化了系统配置.相当于Cobbler封装了DHCP.TFTP.XINTED等服务,结合了PXE.kick ...

  10. Linux 仿真终端:SecureCRT 常用配置

    SecureCRT 有两类配置选项,分别是会话选项和全局选项. 会话选项:修改配置只针对当前会话有效 全局选项:修改配置对所有会话有效 一般会先选择全局选项修改全局配置,然后选择会话选项单独修改个别会 ...