UVa 12627 - Erratic Expansion
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4352
题意:
一开始有1个红气球。每小时后,1个红气球会变成3个红气球和1个蓝气球,而1个蓝气球会变成4个蓝气球。
问:经过k小时后,第A~B行一共有多少个红气球?例如,k=3,A=3,B=7,答案为14。
分析:
设 sum(k,i) 表示k小时后第1~i行的红气球总数,R表示2的k次方,M表示R的中点(即R>>1)。
可以发现,当 i = R 时,sum(k,i) = sum(k-1,M) * 3;
当 i <= M 时,sum(k,i) = sum(k-1,i) * 2;
当 i > M 时,sum(k,i) = sum(k-1,M) * 2 + sum(k-1,i-M)。
递归求解即可,k小时后第A~B行的红气球总数为 sum(k,B) - sum(k,A-1) 。
代码:
1 #include <cstdio> 2 3 typedef long long int LLI; 4 5 LLI sum(LLI k, LLI i){ 6 if(k == 0) return i == 1; 7 LLI R = 1LL << k, M = 1LL << k - 1; 8 if(i == R) return sum(k - 1, M) * 3; 9 if(i <= M) return sum(k - 1, i) * 2; 10 return sum(k - 1, M) * 2 + sum(k - 1, i - M); 11 } 12 13 int main(){ 14 int T, cases = 1; 15 scanf("%d", &T); 16 while(T--){ 17 LLI k, a, b; 18 scanf("%lld%lld%lld", &k, &a, &b); 19 printf("Case %d: %lld\n", cases++, sum(k, b) - sum(k, a - 1)); 20 } 21 return 0; 22 }
转载于:https://www.cnblogs.com/hkxy125/p/8138289.html
UVa 12627 - Erratic Expansion相关推荐
- Uva 12627 Erratic Expansion(不稳定膨胀)
题目链接 : Erratic Expansion 大致题意: 开始时有一个红气球,每过一段时间,气球会膨胀, 一个红气球膨胀成三个红气球,一个蓝气球膨胀成四个蓝气球(如图) 题目输入正整数n表示n组数 ...
- UVa 12627 Erratic Expansion - 分治
因为不好复制题目,就出给出链接吧: Vjudge传送门[here] UVa传送门[here] 请仔细看原题上的那幅图,你会发现,在时间t(t > 0),当前的气球构成的一幅图,它是由三个时间为( ...
- uva 12627——Erratic Expansion
题意:一开始有1个红气球,每小时一个红气球都会变成3个红气球和1个蓝气球,1个蓝气球会变成4个蓝气球,问k个小时后a行到b行的红气球的数量. 思路:递推.a为偶数时,计算a+1到b以及a本行的红气球数 ...
- Uva 12627 Erratic Expansion
这道题大体意思是利用一种递归规则生成不同的气球,问在某两行之间有多少个红气球. 我拿到这个题,一开始想的是递归求解,但在如何递归求解的思路上我的方法是错误的.在研读了例题上给出的提示后豁然开朗(顺便吐 ...
- UVA 12627 Erratic Expansion
题目大致意思为 告诉你一个红球为0时状态,已知一个红球每过一个时间会变为文档所示图中的3红1蓝,而蓝球每过一个时间则会变为4个蓝球.问在某一时刻,h1与h2之间的红球有几个. RT,这一题刚看到的时候 ...
- UVA - 12627 Erratic Expansion : 递归
题目点此跳转 思路 题目意思是(书上原话)一开始有一个红气球.每小时后,一个红气球会变成3个红气球和一个蓝气球,一个蓝气球会变成4个蓝气球,如图所示分别是经过0, 1, 2, 3小时后的情况.经过k ...
- Uva - 12627 - Erratic Expansion
找到递推公式,题目就引刃而解了.数学公式博文没办法写,就写在了word上,切过来了: 用 f 或者 g 都能求出,我两个方法都试了,结果用 g 要比 f 快了近一倍,原本以为 f 会快些,可能是因为往 ...
- UVA - 12627 - Erratic Expansion(找规律递归)
递归找规律即可,用前b行减去前a-1行的红气球个数求解,细节见代码 #include<cstdio> #include<cstring> #include<cstdlib ...
- uva 12627 Erratic Expansion
原题: Piotr found a magical box in heaven. Its magic power is that if you place any red balloon inside ...
最新文章
- 九、OLTP 性能调整与优化--结语
- 2020人工神经网络第一次作业-参考答案第三部分
- flex布局学习笔记
- 顺序查找与二分查找算法
- 读人是基础,看人是关键,做人最重要
- 华为云网络测量如何“悬丝诊脉”
- TensorFlow 1.11.0正式版发布了,强力支持Keras
- 微信小程序——flex弹性布局水平垂直居中
- win 10 mysql8.0安装
- 架空线路的基本结构及组成
- 激荡20年的百度帝国,曾经的王者为何从BAT掉队?到底发生了什么?
- 完美卸载mac电脑里的软件及残留清理教程
- 解决iOS中调用系统中的相机,显示英文标题
- 文字转化为二维码(数据加密)
- 180902 逆向-网鼎(4-dalao)
- 一个奇鸽船新体验:类似的木函软件
- 中位数应用-货仓选址-纸牌均分-糖果传递-七夕祭
- java基础思维导图(java基础部分)
- Nodejs Addons
- 高中计算机教师专业,高中计算机教师资格证,要计算机专业证书吗