题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=844&page=show_problem&problem=4352

题意:一开始有一个红气球。每小时后,一个红气球会变成3个红气球和一个蓝气球,而一个蓝气球会变成4个蓝气球,如图所示分别是经过0,1,2,3小时后的情况。经过k小时后,第A~B行一共有多少个红气球?例如,k=3,A=3,B=7,答案为14。(本段摘自《算法竞赛入门经典(第2版)》)

分析:
        设fk,i)fk, i)为k小时后最上面i行的红气球总数(规定i≤0i \le 0时f(k,i)=0f(k, i)=0),则答案为f(k,b)−f(k,a−1)f(k, b) - f(k, a - 1),对于f(k,i)f(k, i)可以由前一个小时递推而来,当i≥2k−1i \ge 2^{k - 1}时,f(k,i)=f(k−1,i−2k−1)+2∗c(k−1)f(k, i) = f(k - 1, i - 2^{k - 1}) + 2 * c(k - 1),否则,f(k,i)=2∗f(k−1,i)f(k, i) = 2 * f(k - 1, i),其中c(k)表示k小时后红气球的总数,则c(k)=3kc(k) = 3^k。

代码:

#include <fstream>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
#include <sstream>
#include <string>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <string>
#include <vector>using namespace std;const int maxn = 100000 + 5;int T, K, a, b;
long long fac[40];long long f(int k, int i)
{if (i == 0)return 0;if (k == 0)return 1;int kk = 1 << (k - 1);if (i >= kk)return f(k - 1, i - kk) + 2 * fac[k - 1];elsereturn 2 * f(k - 1, i);
}int main()
{fac[0] = 1;for (int i = 1; i < 35; ++i)fac[i] = fac[i - 1] * 3;scanf("%d", &T);for (int C = 0; C < T; ++C){scanf("%d%d%d", &K, &a, &b);printf("Case %d: %lld\n", C + 1, f(K, b) - f(K, a - 1));}return 0;
}

UVa 12627:Erratic Expansion(递推)相关推荐

  1. uva 12627——Erratic Expansion

    题意:一开始有1个红气球,每小时一个红气球都会变成3个红气球和1个蓝气球,1个蓝气球会变成4个蓝气球,问k个小时后a行到b行的红气球的数量. 思路:递推.a为偶数时,计算a+1到b以及a本行的红气球数 ...

  2. Uva 12627 Erratic Expansion

    这道题大体意思是利用一种递归规则生成不同的气球,问在某两行之间有多少个红气球. 我拿到这个题,一开始想的是递归求解,但在如何递归求解的思路上我的方法是错误的.在研读了例题上给出的提示后豁然开朗(顺便吐 ...

  3. uva 12627 Erratic Expansion

    原题: Piotr found a magical box in heaven. Its magic power is that if you place any red balloon inside ...

  4. Uva 12627 Erratic Expansion(不稳定膨胀)

    题目链接 : Erratic Expansion 大致题意: 开始时有一个红气球,每过一段时间,气球会膨胀, 一个红气球膨胀成三个红气球,一个蓝气球膨胀成四个蓝气球(如图) 题目输入正整数n表示n组数 ...

  5. UVa 12627 Erratic Expansion - 分治

    因为不好复制题目,就出给出链接吧: Vjudge传送门[here] UVa传送门[here] 请仔细看原题上的那幅图,你会发现,在时间t(t > 0),当前的气球构成的一幅图,它是由三个时间为( ...

  6. UVa 12627 - Erratic Expansion

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. UVA 12627 Erratic Expansion

    题目大致意思为 告诉你一个红球为0时状态,已知一个红球每过一个时间会变为文档所示图中的3红1蓝,而蓝球每过一个时间则会变为4个蓝球.问在某一时刻,h1与h2之间的红球有几个. RT,这一题刚看到的时候 ...

  8. UVA - 12627 Erratic Expansion : 递归

    题目点此跳转 思路  题目意思是(书上原话)一开始有一个红气球.每小时后,一个红气球会变成3个红气球和一个蓝气球,一个蓝气球会变成4个蓝气球,如图所示分别是经过0, 1, 2, 3小时后的情况.经过k ...

  9. Uva - 12627 - Erratic Expansion

    找到递推公式,题目就引刃而解了.数学公式博文没办法写,就写在了word上,切过来了: 用 f 或者 g 都能求出,我两个方法都试了,结果用 g 要比 f 快了近一倍,原本以为 f 会快些,可能是因为往 ...

  10. UVA - 12627 - Erratic Expansion(找规律递归)

    递归找规律即可,用前b行减去前a-1行的红气球个数求解,细节见代码 #include<cstdio> #include<cstring> #include<cstdlib ...

最新文章

  1. 【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )
  2. 修改段落内容_英文论文修改技巧大全
  3. VC++ ToolTip的简单使用
  4. asp.NET自定义服务器控件内部细节系列教程一
  5. Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
  6. sql相同顺序法和一次封锁法_【数据库】面试题汇总
  7. reflexil教程_【转载】教你使用 Reflexil 反编译.NET
  8. Project:圆柱滚子轴承接触表面应力计算——GB T18254-2002高碳铬轴承钢
  9. 环评图件制作业务承接(生态影响评价)
  10. pixel 1 欧版电信破解4G,安卓P亲测可用(打电话+4G上网)
  11. 分享几个好用的WP插件,让你的网站牛逼起来
  12. 尚硅谷谷粒商城第十二天 商品详情页及异步编排
  13. ios极光推送 App收到推送消息时,修改BadgeNumber,同时点击状态栏消息以后跳到指定的页面和静默推送
  14. 程序员视角下对ChatGPT热潮的思考
  15. 28所示范性微电子院校占地面积排名,中山大学第一!
  16. 征途手游2新开区服务器维护多久,征途2手游新区开服表 征途2手游新区开服时间详解[图]...
  17. [转贴]内核版之OS设计
  18. 测试电视是不是4k的软件,如何检测自家的电视是真4K还是假4K?当贝市场告诉你...
  19. jQuery 实现带下拉提示且自动填充的邮箱
  20. MyEclipse优化全攻略

热门文章

  1. 老虎证券开放api期货合约建立
  2. 每一步都要确保投资人利益—MDU价格保障机制之销毁
  3. SAP.PA认证培训视频教程(58集)
  4. 3.31上午英语视频
  5. 利用背景流量数据(contexual flow data) 识别TLS加密恶意流量
  6. Kotlin学习(二)-------绝对震撼你的kotlin数据类-data class
  7. 如何为您的电动汽车找到充电
  8. android2.2智能手机,Android 2.2入门智能手机 海尔N6E评测
  9. python 通达信公式函数,481009_易基策略二号
  10. 你知道如何用 Git 来统计代码吗?