(紀中)2174. 積木(block)

(File IO): input:block.in output:block.out
時間限制: 1000 ms 空間限制: 131072 KB 具體限制
Goto ProblemSet


題目描述
味味有一個A×B×CA×B×C 的長方體積木,積木是有1×1×11×1×1 的小積木塊組成的。我們設定這個長方體的高爲AA,寬爲BB,長爲CC。(爲方便起見,長方體的長不一定要比寬的數值大)。
現在味味在這個長方體中的的左上角挖去了一個(A1)×(B2)×(C2)(A-1)×(B-2)×(C-2)的小長方體。並且告訴你被挖去長方體的體積爲nn,即n=(A1)×(B2)×(C2)n=(A-1)×(B-2)×(C-2)。現在問你,被挖去小長方體後,原有長方體積木中剩下的1×1×1×1×的小積木塊最少和最多分別是多少個。也就是說,在告訴你n值的前提下,求minA×B×CnmaxA×B×Cnmin{A×B×C-n}和max{A×B×C-n}


輸入
輸入文件名爲block.inblock.in
輸入共11行,僅一個正整數nn

輸出
輸出文件名爲block.outblock.out
輸出共11行包含兩個用空格隔開的正整數,依次表示最少剩餘小積木塊和最多剩餘小積木塊個數。


樣例輸入
【樣例輸入1】
4
【樣例輸入2】
7

樣例輸出
【樣例輸出1】
28 41
【樣例輸出2】
47 65


數據範圍限制
對於2020%的數據1n4001 ≤n≤400
對於5050%的數據1n1061 ≤n≤10^6
對於100100%的數據1n1091 ≤ n≤10^9


提示
樣例1說明:
4=(21)×(42)×(42)4=(2-1)×(4-2)×(4-2) 最少剩餘的小積木塊爲2×4×44=282×4×4-4=28(此時ABCA,B,C值分別爲2442,4,4
$4=(5-1)×(3-2)×(3-2) $最多剩餘的小積木塊爲5×3×34=415×3×3-4=41(此時ABCA,B,C值分別爲5335,3,3


解題思路
較複雜的模擬,題目說什麼就做什麼。


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n;
long long maxn,a[10000],t,minn;
int main(){
	freopen("block.in","r",stdin);
    freopen("block.out","w",stdout);
    scanf("%d",&n);
    maxn=8*n+9;
    for(int i=1;i<=sqrt(n);i++)
    {
    	if(n%i==0)
    	{
    		t++;
    		a[t]=i;
		}
		if((n/i)!=i)
		{
    		t++;
    		a[t]=n/i;
		}
	}
    minn=2147483647;
	for(int i=1;i<=t;i++)
	{
		for(int j=1;j<=t;j++)
		{
			if((a[i]*a[j]*(n/a[i]/a[j]))==n)
			{
				minn=min(((n/a[i]/a[j]+1)*(a[i]+2)*(a[j]+2)-n),minn);
			}
		}
	}
	printf("%d %d",minn,maxn);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章