Uva12627 Erratic Expansion【分治】【例题8-12】
2017-03-01 00:41
393 查看
题目:Erratic Expansion
题意:一开始有一个红气球。 每小时后,一个红气球会变成3个红气球和一个蓝气球,而一个蓝气球会变成4个蓝气球,经过k小时后,第A~B行一共有多少个红气球?
思路:自己没有做出,参考紫书的,直接解析紫书分析。
设g(k,i)表示k小时之后最下面i行的红气球总数
,则答案为g(k,(1<<k) - a +1) - g(k,(1<<k) - b);
解释下这递归式是怎么来的!
当i >= 2^(k-1) 时 g(k,i)=2g(k-1,i-2^(k-1))+c(k-1)
由上图可得,k小时后最下面i行的红气球总数 = k-1小时的2个那一小部分 + k-1小时的总红气球,因为上一次的总框架是下一次的1/4!
参考:紫书-例8-12-P
代码:#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
LL c(int k){
LL ans = 1;
for(int i=0;i<k;i++) ans *= 3;
return ans;
}
/*long long c(int i) {return i == 0 ? 1 : c(i-1)*3;}*/
LL g(int k,LL i){
if(i == 0) return 0;
if(k == 0) return 1;
if(i >= 1<<(k-1) ) return 2*g(k-1,i - (1<<(k-1))) + c(k-1);
else return g(k-1,i);
}
int main()
{
int t,k,a,b,kcase = 0;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&k,&a,&b);
printf("Case %d: %lld\n",++kcase,g(k,(1<<k) - a +1) - g(k,(1<<k) - b));
}
return 0;
}
题意:一开始有一个红气球。 每小时后,一个红气球会变成3个红气球和一个蓝气球,而一个蓝气球会变成4个蓝气球,经过k小时后,第A~B行一共有多少个红气球?
思路:自己没有做出,参考紫书的,直接解析紫书分析。
设g(k,i)表示k小时之后最下面i行的红气球总数
,则答案为g(k,(1<<k) - a +1) - g(k,(1<<k) - b);
解释下这递归式是怎么来的!
当i >= 2^(k-1) 时 g(k,i)=2g(k-1,i-2^(k-1))+c(k-1)
由上图可得,k小时后最下面i行的红气球总数 = k-1小时的2个那一小部分 + k-1小时的总红气球,因为上一次的总框架是下一次的1/4!
参考:紫书-例8-12-P
代码:#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
LL c(int k){
LL ans = 1;
for(int i=0;i<k;i++) ans *= 3;
return ans;
}
/*long long c(int i) {return i == 0 ? 1 : c(i-1)*3;}*/
LL g(int k,LL i){
if(i == 0) return 0;
if(k == 0) return 1;
if(i >= 1<<(k-1) ) return 2*g(k-1,i - (1<<(k-1))) + c(k-1);
else return g(k-1,i);
}
int main()
{
int t,k,a,b,kcase = 0;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&k,&a,&b);
printf("Case %d: %lld\n",++kcase,g(k,(1<<k) - a +1) - g(k,(1<<k) - b));
}
return 0;
}
相关文章推荐
- 例题8-12 UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (递归)
- 【例题 8-12 UVA-12627】Erratic Expansion
- 例题 6-12 油田 UVa 572 用dfs求连通块
- uva572 - Oil Deposits 入门经典II 第六章数据结构基础 例题6-12
- UVA - 12627 Erratic Expansion(分治)
- 例题6-12 UVA572 Oil Deposits 基础dfs求连通块
- 例题6-12-Oil Deposits-UVa 572
- UVa 12627 奇怪的气球膨胀(分治)
- UVa #1343 The Rotation Game (例题7-12)
- 算法竞赛入门经典 例题 6-12 油田(Oil Deposits, UVa 572)
- UVa 12627 Erratic Expansion - 分治
- 紫书章五例题12 城市正视图 (离散化)UVA 221
- UVA 12627 <递归找规律,紫书p245页例题>
- 紫书章五例题12 城市正视图 (离散化)UVA 221
- 例题6-12 UVa572 Oil Deposits(DFS)
- 紫书章五例题12 城市正视图 (离散化)UVA 221
- 例题 10-12 纸牌游戏 UVa 1637
- 例题9-12 UVa12186 Another Crisis(树型DP)
- UVA 12627 Erratic Expansion (递归,分治)
- 紫书章五例题12 城市正视图 (离散化)UVA 221