社区讨论
若只题求调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值分别为 2,4,4)
4=(5-1)×(3-2)×(3-2) 最多剩余的小积木块为5×3×3-4=41(此时 A,B,C值分别为 5,3,3)
输出(二)
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 条回复,欢迎继续交流。
正在加载回复...