您的位置:首页 > 其它

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));

代码:

#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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: