HDU - 4112 Break the Chocolate(规律)

题意:有一块n*m*k的巧克力,最终需要切成n*m*k个1*1*1的块,问用以下两种方法最少掰多少次能达到目的:

1、用手掰:每次只能拿出一块来掰;
2、用刀切:可以把很多已经分开的块摞在一起一刀切下来

分析:

1、用手掰,需要n*m*k-1次。

2、用刀切,可以分别考虑长宽高,计算长宽高分别切成单位长度所需要的最少次数,相加即可。

二分切,可得最少次数。规律为,长度为x最少需切ceil(log2(x))次。

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
int main(){
    int T;
    scanf("%d", &T);
    int kase = 0;
    while(T--){
        LL n, m, k;
        scanf("%lld%lld%lld", &n, &m, &k);
        LL cnt1 = n * m * k - 1;
        LL cnt2 = (LL)ceil(log2((double)n)) + (LL)ceil(log2((double)m)) + (LL)ceil(log2((double)k));
        printf("Case #%d: %lld %lld\n", ++kase, cnt1, cnt2);
    }
    return 0;
}

  

时间: 2024-08-25 14:52:21

HDU - 4112 Break the Chocolate(规律)的相关文章

hdu 4112 Break the Chocolate 贪心

Break the Chocolate Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4112 Description Benjamin is going to host a party for his big promotion coming up.Every party needs candies, chocolates and beer, and of cour

HDU 4112 Break the Chocolate(简单的数学推导)

Break the Chocolate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4556    Accepted Submission(s): 1458 Problem Description Benjamin is going to host a party for his big promotion coming up.Eve

HDU - 4112 Break the Chocolate

Problem Description Benjamin is going to host a party for his big promotion coming up. Every party needs candies, chocolates and beer, and of course Benjamin has prepared some of those. But as everyone likes to party, many more people showed up than

hdu 4952 Number Transformation (找规律)

题目链接 题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数 分析: 经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值,求出这个固定的值和K相乘就可以了, 为什么会趋于固定的值呢,因为最后虽然i在不断增长,但是x也是在增长的,每次的倍数会回退一个发现 有余数,然后再加上一个,所以趋于稳定. 官方题解: 1 #include <iostream> 2 #include <cstdio> 3 #includ

HDU 1005 Number Sequence (数学规律)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104190    Accepted Submission(s): 25232 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU - 3644:A Chocolate Manufacturer&#39;s Problem(模拟退火, 求多边形内最大圆半径)

pro:给定一个N边形,然后给半径为R的圆,问是否可以放进去.  问题转化为多边形的最大内接圆半径.(N<50): sol:乍一看,不就是二分+半平面交验证是否有核的板子题吗. 然而事情并没有那么简单.  因为我们的多边形可能是凹多边形,而前面的方法只对凸多边形有效. 学习了下模拟退火的算法,这个随机算法只在最小圆覆盖的时候写过. 这里再学一下,看起来更正宗一点的.  每次在当前点的附近(R)找是否能优化,而这个R慢慢变小,使得趋紧答案的趋势更精细. 判定点再多边形内:同样,不能用检验是否在每条

HDU 2147 kiki&#39;s game(规律,博弈)

kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total Submission(s): 10763    Accepted Submission(s): 6526 Problem Description Recently kiki has nothing to do. While she is bored, an idea appears in his

hdu 4112

Problem Description Benjamin is going to host a party for his big promotion coming up.Every party needs candies, chocolates and beer, and of course Benjamin has prepared some of those. But as everyone likes to party, many more people showed up than h

HDU 4940 Destroy Transportation system 规律题

答案只有2种情况,所以ans = rand()%2; if(ans)puts("happy") else puts("unhappy"); == 想过无源汇的网络流,还是比较麻烦的,然后没往下想... 设s点集有一些点, 多加一个点一定是y增加比较快_(:зゝ∠)_ 然后设s点集只有一个点 #include <cstdio> #include <map> #include <set> #include <algorithm&