社区讨论

若只题求调T^T

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj395bq
此快照首次捕获于
2025/11/03 20:00
4 个月前
此快照最后确认于
2025/11/03 20:00
4 个月前
查看原帖
CPP
味味有一个 A×B×C 的长方体积木,积木是有 1×1×1 的小积木块组成的。我们设定这个长方体的高为 A,宽为B,长为 C。(为方便起见,长方体的长不一定要比宽的数值大)。
现在味味在这个长方体中的的左上角挖去了一个(A-1)×(B-2)×(C-2)的小长方体。并且告诉你被挖去长方体的体积为 n,即 n=(A-1)×(B-2)×(C-2)。现在问你,被挖去小长方体后,原有长方体积木中剩下的 1×1×1的小积木块最少和最多分别是多少个。也就是说,在告诉你 n值的前提下,求 min{A×B×C-n}和 max{A×B×C-n}。
【输入】
输入文件名为  block.in。  
输入共 1行,仅一个正整数n。
【输出】
输出文件名为  block.out。  
输出共 1行包含两个用空格隔开的正整数,依次表示最少剩余小积木块和最多剩余小积木块个数。
输入(一)
4
输入(二)
7
输出(一)
28 41
样例说明:
4=(2-1)×(4-2)×(4-2) 最少剩余的小积木块为2×4×4-4=28(此时 A,B,C值分别为 2444=(5-1)×(3-2)×(3-2) 最多剩余的小积木块为5×3×3-4=41(此时 A,B,C值分别为 533)
输出(二)
47 65
对于20%的数据1 ≤n≤400
对于50%的数据1 ≤n≤10^6
对于100%的数据 1 ≤ n≤10^9
时间限制为1
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define j n/i/k
int n,ma,mi=LLONG_MAX;
signed main(){
	//freopen("block.in","r",stdin);
	//freopen("block.out","w",stdout);
	cin>>n;
	for(int i=1;i*i*i<=n;i++){
		if(n%i) continue;
		for(int k=i;k<=j;k++){
			if(n%k) continue;
			int l1=(i+1)*(k+2)*(j+2)-n,l2=(k+1)*(i+2)*(j+2)-n,l3=(j+1)*(i+2)*(k+2)-n;
			ma=max(max(ma,l1),max(l2,l3));
			mi=min(min(mi,l1),min(l2,l3));
		}
	}
	cout<<mi<<" "<<ma;
}
20pts,8/10个点WA
未归紫衫

回复

0 条回复,欢迎继续交流。

正在加载回复...