Reginal2011_Chengdu_B Break the Chocolate
2014-03-07 19:39
225 查看
题目地址:2011_Chengdu_B
题目大意:
用一个巧克力立方体,现在两种方式切割
1 徒手掰开 每次只能对一小块操作
2 用刀切,可以重叠着切。
现在给你长宽高 问分别最少要多少次才能切成1*1*1的小块。
假设是x*y*z
《1》用第一种方法 是f1=x-1 (切成x块)+x*(余下每一块需要切的次数f2) // 现在f2要切的都是1*y*z的
f2= y-1+y*(余下的每一块要切的次数f3) // 现在f2要切的都是1*1*z的
f3=z-1
所以答案就是xyz-1 // 注意可能会超int
《2》 用第二种方法切。由于每一刀后得到的新的两部分都可以叠起来再切。那么只要是还可以切的部分,都可以在一次操作下切成2部分。
所以k次操作最多可以切成2^k 块 ,分别对长宽高三个维度切就是ceil(log2(x))*ceil(log2(y))*ceil(log2(z));
代码:
题目大意:
用一个巧克力立方体,现在两种方式切割
1 徒手掰开 每次只能对一小块操作
2 用刀切,可以重叠着切。
现在给你长宽高 问分别最少要多少次才能切成1*1*1的小块。
假设是x*y*z
《1》用第一种方法 是f1=x-1 (切成x块)+x*(余下每一块需要切的次数f2) // 现在f2要切的都是1*y*z的
f2= y-1+y*(余下的每一块要切的次数f3) // 现在f2要切的都是1*1*z的
f3=z-1
所以答案就是xyz-1 // 注意可能会超int
《2》 用第二种方法切。由于每一刀后得到的新的两部分都可以叠起来再切。那么只要是还可以切的部分,都可以在一次操作下切成2部分。
所以k次操作最多可以切成2^k 块 ,分别对长宽高三个维度切就是ceil(log2(x))*ceil(log2(y))*ceil(log2(z));
代码:
#include<iostream> #include<cmath> using namespace std; int main() { int cas; cin>>cas; long long n,m,k; for(int i=0;i<cas;i++) { cin>>n>>m>>k; cout<<"Case #"<<i+1<<": "<<n*m*k-1<<" "<<ceil(log(n)/log(2))+ceil(log(m)/log(2))+ceil(log(k)/log(2))<<endl; } }
相关文章推荐
- Reginal2011_Chengdu_B Break the Chocolate
- HDU - 4112 Break the Chocolate
- HDU 4112 Break the Chocolate(简单的数学推导)
- 学校1051 巧克力 ||HDU 4112 Break the Chocolate
- HDU-#4112 Break the Chocolate(规律)
- Break the Chocolate(推论题)
- Break the Chocolate(规律)
- hdu4112-规律&二进制- Break the Chocolate
- hdoj Break the Chocolate 4112 (数学规律题)
- HDU 4115 Eliminate the Conflict【2011 ACM Asia Chengdu Regional Problem E】
- HDU 4112 Break the Chocolate
- Codeforces Round #304 (Div. 2) Break the Chocolate 水题
- hdu-4112-Break the Chocolate
- hdu 4112 Break the Chocolate
- hdu 4112 Break the Chocolate
- HDU 4112 Break the Chocolate(模拟)
- HDU - 4112 Break the Chocolate
- hdu 4112 Break the Chocolate(乱搞题)
- B - Break the Chocolate HDU - 4112
- hdu 4112 Break the Chocolate 贪心