UVA 12627 Erratic Expansion (递归,分治)
2017-06-22 22:14
225 查看
题意:一开始有一个红气球,每小时后,一个红气球会变成3个红气球和一个蓝气球,而每一个蓝气球会变成4个蓝气球;经过K个小时后,第A~B行共有多少个红气球?
紫书思路:分治思想,k小时由四个k-1小时的情况而成,其中右下角全是蓝气球,不用考虑。
f(k,i)表示k小时之后最上面i行的红气球总数,g(k,i)表示k小时之后最下面i行的红气球总数(当 i<=0 时,f(k,i) = g(k,i)=0),则所求答案为总的气球个数 - f(k,a-1) -g(k,(1<<k) -b)。
如果i>=2^(k-1),则满足g(k,i)=2*g(k-1,i-2^(k-1)) + c(k),否则g(k,i)=g(k-1,i)。其中,c(k) = 3^k 表示k小时后红气球的总数。
同理可求f(k,i).
AC代码:
紫书思路:分治思想,k小时由四个k-1小时的情况而成,其中右下角全是蓝气球,不用考虑。
f(k,i)表示k小时之后最上面i行的红气球总数,g(k,i)表示k小时之后最下面i行的红气球总数(当 i<=0 时,f(k,i) = g(k,i)=0),则所求答案为总的气球个数 - f(k,a-1) -g(k,(1<<k) -b)。
如果i>=2^(k-1),则满足g(k,i)=2*g(k-1,i-2^(k-1)) + c(k),否则g(k,i)=g(k-1,i)。其中,c(k) = 3^k 表示k小时后红气球的总数。
同理可求f(k,i).
AC代码:
#include<cstdio> #include<cstring> using namespace std; typedef long long LL; LL C(int k){ //红气球总数 LL t = 1; for(int i = 0; i < k; i++) t *= 3; return t; } LL F(int k,int a){ //最上面a行 if(a <= 0) return 0; if(k == 0) return 1; if(a <= (1<<k-1)) return 2*F(k-1,a); else return F(k-1,a - (1<<k-1)) + 2*C(k-1); } LL G(int k,int b){ //最下面b行 if(b <= 0) return 0; if(k == 0) return 1; if(b <= (1<<k-1)) return G(k-1,b); else return 2*G(k-1,b - (1<<k-1)) + C(k-1); } int main(){ int T; scanf("%d",&T); int cnt =0; while(T--){ int K,A,B; scanf("%d%d%d",&K,&A,&B); LL tot = C(K); LL f = F(K,A - 1); LL g = G(K,(1<<K) - B); printf("Case %d: %lld\n",++cnt,tot - f - g); } return 0; }
相关文章推荐
- UVa 12627 Erratic Expansion 奇怪的气球膨胀 (分治_递归) 白书P245
- Uva12627 Erratic Expansion【分治】【例题8-12】
- Uva 12627 Erratic Expansion(递归)
- uva12627(分治思想)
- CSU-ACM2017暑期训练3-递推与递归I - Erratic Expansion UVA - 12627
- uva 12627 - Erratic Expansion(递归求解)
- UVa 12627 Erratic Expansion - 分治
- UVa 12627 (递归 计数 找规律) Erratic Expansion
- 例题8-12 UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (递归)
- uva 12627 - Erratic Expansion(递归求解)
- UVA 1608 Non-boring sequences 递归分治
- uva12627 Erratic Expansion (递归)
- UVA 12627:Erratic Expansion(递归)
- UVA - 12627 Erratic Expansion(分治)
- 【高效算法设计——递归】 UVa 12627 Erratic Expansion
- UVA - 1608 Non-boring sequences(递归分治,中途相遇)
- UVA - 1608 Non-boring sequences 递归(分治思想)
- UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (分治)
- UVA - 12627 - Erratic Expansion(找规律递归)
- UVA - 12627 Erratic Expansion : 递归