博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 12627 气球胀啊胀
阅读量:5377 次
发布时间:2019-06-15

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

题意:第0个小时有一个红气球,每过一个小时,一个红气球膨胀为3个红球和1个蓝球

一个蓝球膨胀为4个蓝球,排成下图的样子,问过了k小时,第a行到第b行有多少个红球

看下题目里的图,把每个图十字分开,就很容易发现k和k+1的关系

除了右下角全是蓝色以外,剩下都是复制

这里写图片描述

f[k][i] 表示第k个小时,前i行有多少个红球
当i在上半区(1到(1<<(k-1))行)的时候,气球是复制的k-1的状态,只需 *2即可
。。。下。。。。。。,把上半区的全加上,再加上k-1时前(i-上半区行数)行的气球
c[k]=第k个小时红色气球总数

这里写图片描述

答案输出f[k][b]-f[k][a-1]即可

这里写图片描述

#include
#include
#include
typedef long long LL;using namespace std;const int N=40000;int i,k,a,b;LL c[40];LL f(int k,int i){ if (i<=0)return 0; if (k==0)return 1; if (i<=(1<<(k-1)))return f(k-1,i)<<1; return c[k-1]*2+f(k-1,i-(1<<(k-1)));}int main(){ //freopen("fuck.in","r",stdin); int T;scanf("%d",&T); c[0]=1;for (int i=1;i<=31;i++)c[i]=c[i-1]*3; for (int cas=1;cas<=T;cas++){ scanf("%d%d%d",&k,&a,&b); printf("Case %d: %lld\n",cas,f(k,b)-f(k,a-1)); } return 0;}

转载于:https://www.cnblogs.com/cww97/p/7534032.html

你可能感兴趣的文章
PYTHON线程知识再研习F---队列同步Queue
查看>>
Winform WebBrowser加上进度条
查看>>
树莓派的configure配置文件
查看>>
[转]RPA流程自动化-Blueprism认证考试介绍
查看>>
网络教育 全国统一考试 2012年考试工作计划
查看>>
[转]浅谈Android重力感应
查看>>
数据库设计不推荐使用Bool类型
查看>>
POJ 3281 Dining 【最大流】【神建模】
查看>>
查看当前运行的SQL语句
查看>>
js一些常用方法总结
查看>>
PHP二次开发常用的工具|只能在服务器上调试用什么工具开发
查看>>
Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
查看>>
宇宙中最强大的开发环境免费了!
查看>>
C#中运行bat
查看>>
lang3 StringUtils
查看>>
Sniffer
查看>>
nodejs 实现继承
查看>>
android闹钟(三):实现时钟功能
查看>>
2.1 容器的基本实现
查看>>
用映射的方法获取当前方法的名称
查看>>