博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 399B - Red and Blue Balls
阅读量:6915 次
发布时间:2019-06-27

本文共 859 字,大约阅读时间需要 2 分钟。

 

题意:你有一个栈,栈有n个球,球有蓝红色。定义

  1.当栈顶为红球时,不断移除栈顶元素

  2.将栈顶的蓝球更换为红球

  3.向栈里填充蓝球只至栈有n个球

为一次操作

 

问在第几次操作的过程中,栈内全部为红球

 

我们定义栈顶为第零层。在游戏为结束之前,我们必定能找到一个蓝色的球,满足其比其小的层次全为红球。定义将第i层及其上方所有球变为红色需要的操作次数为F(i)

F(0)=1;

F(1)=1+F(0)=2;//1代表第一次操作,结果是将i层变为红球,0~i-1层全变为蓝色球

F(2)=1+F(0)+F(1)=4;

F(3)=1+F(0)+F(1)+F(2)=8;

我们可以发现F(i)等同于2^i。

原因嘛...红球相当于二进制中的1,蓝球相当于0。蓝球(0)上层都是红球(1),那么只需1即可进位,进位后补零。题意求的就是给定状态对应的大小与2^n的差值

 

很多有二元表示外加一顿奇怪的操作或复杂的模拟的题目,无论是用球,状态,数字,都应该联想到二进制表示。特别是如这种题目中1<=n<=50这么小的情况

 

1 #include 
2 using namespace std; 3 typedef long long LL; 4 5 int n; 6 LL ans = 0; 7 8 int main(int argc, const char * argv[]) { 9 scanf("%d", &n);10 getchar();11 for (int i = 0; i <= n - 1; i++) {12 if (getchar() == 'B') ans |= ((LL)1 << i); //注意这里的类型转化QAQ13 }14 printf("%lld\n", ans);15 return 0;16 }

 

转载于:https://www.cnblogs.com/xFANx/p/7347931.html

你可能感兴趣的文章
再现一分钱中标,中国电信拿下海南政务云项目
查看>>
文件服务器之二:FTP服务器(pureftp)
查看>>
30分钟快速搭建门店智能监控视频分析
查看>>
解决drbd不能启动问题(Can not load the drbd module.)
查看>>
简单的RIP实验
查看>>
4星|《哈佛商业评论》2017年11期:高质量基础管理对企业的重要性不亚于卓越的战略思考。...
查看>>
ssh端口转发(之kettle ssh方式连接数据库)
查看>>
出现错误,显示事务没有回滚
查看>>
2、权限、变量、for 学习笔记
查看>>
Centos6安装配置rsync+inotify实时单向同步
查看>>
Cisco系列路由器密码恢复研究与实践
查看>>
顺时针打印矩阵
查看>>
Linux 2 unit5 LVM创建
查看>>
函数定义、函数的参数、函数的默认参数
查看>>
javaScript显示和隐藏(display属性)
查看>>
采用管道进行通讯的例子
查看>>
ubuntu添加一个源
查看>>
Oracle动态采样学习
查看>>
安全跟踪升级
查看>>
JavaScript从作用域到闭包
查看>>