因为不好复制题目,就出给出链接吧:

Vjudge传送门[here]

UVa传送门[here]


  请仔细看原题上的那幅图,你会发现,在时间t(t > 0),当前的气球构成的一幅图,它是由三个时间为(t - 1)的图再加上一块全是蓝色的一块构成。所以可以想到递归求解。对于上半部分的行求前一时刻对应几行的红球数乘2,下面的减去2t - 1然后递归前一幅图求解。

  但是这样最坏的时间复杂度为O(2k-1),仍然会TLE,那么得另寻出路。如果求在时刻t整个一幅图的红球个数,那么可以直接算出来,个数为3k

  因此在递归的过程中特判一下是不是求整个图的红球个数,可以把时间复杂度将为?O(log2n)

Code

 /**
* UVa
* Problem#12627
* Accepted
* Time:0ms
*/
#include<iostream>
#include<cstdio>
#include<cctype>
#include<ctime>
#include<cstring>
#include<cstdlib>
#include<fstream>
#include<sstream>
#include<algorithm>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<vector>
#include<stack>
#ifndef WIN32
#define AUTO "%lld"
#else
#define AUTO "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define inf 0xfffffff
#define smin(a, b) a = min(a, b)
#define smax(a, b) a = max(a, b)
template<typename T>
inline void readInteger(T& u){
char x;
int aFlag = ;
while(!isdigit((x = getchar())) && x != '-');
if(x == '-'){
x = getchar();
aFlag = -;
}
for(u = x - ''; isdigit((x = getchar())); u = (u << ) + (u << ) + x - '');
ungetc(x, stdin);
u *= aFlag;
} int T;
int n, a, b; template<typename T>
T pow(T a, int pos) {
if(pos == ) return ;
if(pos == ) return a;
T temp = pow(a, pos / );
if(pos & ) return temp * temp * a;
return temp * temp;
} inline void init() {
readInteger(n);
readInteger(a);
readInteger(b);
} long long dfs(int dep, int top, int bottom) {
if(dep == ) return ;
if(top == && bottom == ( << dep)) return pow((long long), dep);
int mid = << (dep - );
if(bottom <= mid) return * dfs(dep - , top, bottom);
if(top > mid) return dfs(dep - , top - mid, bottom - mid);
return * dfs(dep - , top, mid) + dfs(dep - , , bottom - mid);
} inline void solve() {
long long res = dfs(n, a, b);
printf(AUTO"\n", res);
} int main() {
readInteger(T);
for(int kase = ; kase <= T; kase++) {
init();
printf("Case %d: ", kase);
solve();
}
return ;
}

UVa 12627 Erratic Expansion - 分治的更多相关文章

  1. UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (分治)

    紫书例题p245 Piotr found a magical box in heaven. Its magic power is that if you place any red balloon i ...

  2. UVA 12627 - Erratic Expansion

    一个红球能够分裂为3个红球和一个蓝球. 一个蓝球能够分裂为4个蓝球. 分裂过程下图所看到的: 设当前状态为k1.下一状态为k2. k1的第x行红球个数 * 2 ⇒ k2第2*x行的红球个数. k1的第 ...

  3. Uva 12627 Erratic Expansion(递归)

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

  4. uva 12627 - Erratic Expansion(递归求解)

    递归的边界条件写的多了--不是必需写呢么多的.. 不明确可共同探讨~ #include<cstdio> #include<iostream> #include<cmath ...

  5. UVA - 12627 Erratic Expansion(奇怪的气球膨胀)(递归)

    题意:问k小时后,第A~B行一共有多少个红气球. 分析:观察图可发现,k小时后,图中最下面cur行的红气球个数满足下式: (1)当cur <= POW[k - 1]时, dfs(k, cur) ...

  6. UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)

    不难发现,每过一个小时,除了右下方的气球全都是蓝色以外,其他都和上一个小时的气球是一样的,所以是可以递推的.然后定义一类似个前缀和的东西f(k,i)表示k小时之后上面i行的红气球数.预处理出k小时的红 ...

  7. 12627 - Erratic Expansion——[递归]

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

  8. 【数形结合】Erratic Expansion

    [UVa12627]Erratic Expansion 算法入门经典第8章8-12(P245) 题目大意:起初有一个红球,每一次红球会分成三红一蓝,蓝球会分成四蓝(如图顺序),问K时的时候A~B行中有 ...

  9. UVa 12627 (递归 计数 找规律) Erratic Expansion

    直接说几个比较明显的规律吧. k个小时以后,红气球的个数为3k. 单独观察一行: 令f(r, k)为k个小时后第r行红气球的个数. 如果r为奇数,f(r, k) = f((r+1)/2, k-1) * ...

随机推荐

  1. .windows安装使用这些偏底层的Python扩展太

    .windows安装使用这些偏底层的Python扩展太不爽了,怎么彻底解决 error: Unable to find vcvarsall.bat呢? 1.不要按网上说的,安装MinGW,然后在“.. ...

  2. 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考???

    https://blog.csdn.net/saw009/article/details/80590245 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考??? 首先图1是LeNe ...

  3. hmm用于speech和image

    隐马尔科夫模型用于speech和image的原因是,因为hmm模型主要是适用于前后特征有关联性(参考骰子案例)的数据,有三种模式, 其中一种模式就是通过数据输出判断来源分类,而speech和image ...

  4. flask操作简章

    https://blog.csdn.net/u011054333/article/details/70151857

  5. RuntimeError: Object: Could not open SDE workspace

    客户环境,linux 终端里,使用arcpy.ListUsers() 报错:RuntimeError: Object: Could not open SDE workspace 经检查,问题在于 该机 ...

  6. 查询删除安装rpm -qa | grep -i wrapname

    查询:rpm -qa | grep -i wrapname 删除:sudo rpm -ev wrapname 删除依赖:sudo rpm -ev --nodeps mysql-libs-5.6.60- ...

  7. (3.1)mysql基础深入——mysql二进制与源码目录结构介绍

    (3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...

  8. Window版本 安装mysql

    #1.下载:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ 下载下来解压到指定目录 就安装完成了 #2.解压 如 ...

  9. UIWebview于JS交互

    最近使用火车票网的限行网页,但是广告以及头部nav和地步footer都是我们现在所不需要的,所以决定使用js交互,下面所有代码都写在 webViewDidFinishLoad 里面 1.查看原网址的源 ...

  10. centos 基础修改文件权限

    在centos 下 nginx 默认用户是user = apachegroup = apache 所以需要更改文件和文件夹权限时候需要满足apache用户才能进行 常用方式: $ chmod Runt ...