您的位置:首页 > 其它

hdu4112-规律&二进制- Break the Chocolate

2017-10-03 18:07 351 查看
https://vjudge.net/contest/188211#problem/B

给定一块大小为m*n*k的巧克力

有两种方式:① 用手掰,可以把一块变成两块,两块为任意大小。

② 用刀切,可以把他们叠起来切。假设刀无限长,且切割厚度没有限制。

思路:wa了四发,开始看样例了猜了一个,后来想到用刀切是可以叠起来切的。并不是(m-1)+(n-1)+(k-1)。

于是就用二进制算了一下。向上取整。每次从中间切,然后叠起来再切那种样子。

wa了一发。。 爆int。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{   int t;
ll a,b,c;
scanf("%d",&t);
int cas=1;
while(t--){
scanf("%lld%lld%lld",&a,&b,&c);
//cout<<a<<b<<c<<endl;
ll s=a*b*c-1;
//ll d=1ll*3000*3000*3000;
//cout<<s+1<<endl;
//cout<<ceil(log2(a))<<endl;
//cout<<1ll*ceil(log2(a))<<endl;
//cout<<ceil(1.0*log2(b))<<endl;
//cout<<ceil(1.0*log2(c))<<endl;;
ll ss=1ll*ceil(log2(a))+1ll*ceil(log2(b))+1ll*ceil(log2(c));
printf("Case #%d: %lld %lld\n",cas++,s,ss);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: