题解:SP9935 BC - Break the Chocolate

第一问,我们要将巧克力分成 \(1\times 1\times 1\) 的小块,每次分两半,减掉总共大的 \(1\) 块,答案为 \(LWH-1\)

第二问,只要每次从中间切后把两块巧克力叠起来切即可,答案为 \(\lceil\log_2L\rceil+\lceil\log_2W\rceil+\lceil\log_2H\rceil\)

代码:

#include<bits/stdc++.h>
int log2(int x) {
	int pwr=1;
	int res=0;
	while(pwr<x) {
		pwr<<=1;
		res++;
	}
	return res;
}
int main(){
	int T;
	scanf("%d",&T);
	for (int _cs=1;_cs<=T;_cs++){
		int N,M,K;
		scanf("%d %d %d",&N,&M,&K);
		long long volume=N*M*K;
		printf("Case #%d: %lld %d\n",_cs,volume-1,log2(N)+log2(M)+log2(K));
	}
}

posted @ 2024-10-19 08:54  cly312  阅读(13)  评论(0)    收藏  举报