HDU4112

 1 对于n*m*k的方块,用手掰成1*1*1的那么搜需要的步骤是固定的,为n*m*k-1,如果用刀切,因为可以把多块叠在一起切,所以对于长度为n的,将他切成0,所需要的步骤数位k  
 2 
 3 对于n*m*k的方块,用手掰成1*1*1的那么搜需要的步骤是固定的,为n*m*k-1,如果用刀切,因为可以把多块叠在一起切,所以对于长度为n的,将他切成0,所需要的步骤数位k[cpp] view plaincopyprint?
 4 满足n/2^k=1即n=2^k,等式两边取对数,logn=k*log2,所以k等于logn/log2  
 5 
 6 #include<stdio.h>   
 7 #include<string.h>   
 8 #include<math.h>   
 9 int main()  
10 {  
11     __int64 i,j,n,m,k;  
12     __int64 cas=0;  
13     __int64 t;  
14     scanf("%I64d",&t);  
15     while(t--)  
16     {  
17         scanf("%I64d%I64d%I64d",&n,&m,&k);    
18         __int64 ans1=n*m*k-1;    
19         __int64 ans2=(__int64)(ceil(log(n*1.0)/log(2.0))+ceil(log(m*1.0)/log(2.0))+ceil(log(k*1.0)/log(2.0)));    
20         printf("Case #%I64d: %I64d %I64d\n",++cas,ans1,ans2);    
21   
22     }  
23     return 0;  
24 }  

 

posted on 2013-08-22 21:50  ok_boy  阅读(249)  评论(0编辑  收藏  举报

导航