UVA
来源:互联网 发布:java安装时出现错误 编辑:程序博客网 时间:2024/05/16 08:22
题目点此跳转
思路
题目意思是(书上原话)一开始有一个红气球。每小时后,一个红气球会变成3个红气球和一个蓝气球,一个蓝气球会变成4个蓝气球,如图所示分别是经过0, 1, 2, 3小时后的情况。经过k小时后,第A~B行一共有多少个红气球?例如,k=3,A=3,B=7,答案为14。
需要设出如下变量:
g(k, i): k 小时后最下面 i 行的红气球总数
c(k): k 小时后红气球的总数
则对于输入的k, a, b, 显然结果为
g(k,
2k−a+1 ) - g(k,2k - b)
//即k时从第a行到最后一行的红气球数 - 从第b+1行到最后一行的红气球数
那么只要知道如下递推关系即可解决本题:
g(k, i) = 2 * g(k-1, i-
2k−1 ) + c(k), {i>=2k−1 }
g(k, i) = g(k-1, i ), {i<2k−1 }
c(k) =3k
代码
LL k, a, b, c[maxn];LL g(LL k, LL i) { if(i == 0) return 0; if(k == 0) return 1; LL t = 1<<(k-1); if(i >= t) return 2*g(k-1, i-t) + c[k-1]; return g(k-1, i);}int main() { c[0] = 1; for(int i = 1; i <= 30; ++i) c[i] = 3*c[i-1]; int kase = 0, t; cin >> t; while(t--) { scanf("%lld%lld%lld", &k, &a, &b); LL n = 1<<k; printf("Case %d: %lld\n", ++kase, g(k, n-a+1)-g(k, n-b)); } return 0;}
阅读全文
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 搜索引擎选择: Elasticsearch与Solr
- SYN Flood攻击及防御方法
- json学习
- springboot学习之--Logback日志详解(二)
- 神奇药水
- UVA
- Android Butterknife 8.4.0 使用方法总结
- C-C++中const关键字的用法及其与宏常量的比较
- [UVa 1572] 自组合(Self-Assembly)
- 170803 逆向-RouterScan(7)
- 在spring,hibernate,struts2框架整合中出现的no session问题
- 解决ScrollView嵌套RecyclerView(横向)或ListView(横向)时,横向滑动不顺畅的问题。
- 高精加、乘
- POJ3468 A Simple Problem with Integers (树状数组 | 线段树)