hdu-4112-Break the Chocolate

来源:互联网 发布:windows bat date 编辑:程序博客网 时间:2024/05/22 17:27

题意:一块三维巧克力,手掰和刀切,最少几次,可分为n*m*k个单元块

题解:手掰,要有n*m*k个就要掰n*m*k下,当然,你掰下最后第二个的时候,最后一个就自然出现了,所以手掰是n*m*k-1个;

刀切, 可以上下叠起来切, 所以每一维的处理办法一样, 切一半+(一半的一半)+(一半的一半的一半)+..........,向上取整。


//

#include<iostream>#include<cstdio>using namespace std;__int64 f(__int64 n){int ans=0;while(n>1){ans++;if(n%2) n=(n/2)+1;else n/=2;}return ans;}int main(){__int64 T;cin>>T;for(int i=1; i<=T; i++){__int64 n,m,k;__int64 ans1=0, ans2=0;cin>>n>>m>>k;ans1 = n*m*k-1;ans2 = f(n)+f(m)+f(k);cout<<"Case #"<<i<<": "<<ans1<<" "<<ans2<<endl;}return 0;}

code

原创粉丝点击