B
来源:互联网 发布:firefox json美化插件 编辑:程序博客网 时间:2024/04/30 12:07
题目链接:点击打开链接
题目大意:将一块N*M*K的巧克力分解成1*1*1的大小块,按照手工分和用刀切两种方式,问分别最少需要多少步?
手工的方法直接体积减一便是答案,而刀切的方法找规律,一个数一个数的找便会发现规律,详情见代码。
#include <cstdio>#include <iostream>#include <string>#include <cstring>#include <algorithm>#include <iomanip>#include <cmath>using namespace std;typedef long long int ll;ll num(ll n){ ll cnt=0,tmp=2; while(n>=tmp){ cnt++; tmp=tmp*2; if(n>tmp/2&&n<tmp) ++cnt; } return cnt;}int main(){ int n; cin>>n; int kase=0; while(n--){ ll n,m,k; kase++; cin>>n>>m>>k; cout<<"Case #"<<kase<<": "<<n*m*k-1<<" "<<num(n)+num(m)+num(k)<<endl; } return 0;}