題目描述
味味有乙個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和max。
輸入
輸入檔名為 block.in。
輸入共1行,僅乙個正整數n。
輸出
輸出檔名為 block.out。
輸出共1行包含兩個用空格隔開的正整數,依次表示最少剩餘小積木塊和最多剩餘小積木塊個數。
樣例輸入
【樣例輸入1】
4【樣例輸入2】
7樣例輸出
【樣例輸出1】
28 41
【樣例輸出2】
47 65
資料範圍限制
對於20%的資料1 ≤n≤400
對於50%的資料1 ≤n≤10^6
對於100%的資料1 ≤ n≤10^9
提示
樣例1說明:
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)
正解
貪心演算法,列舉挖出去的長方體的長a,寬b,高c
因為n=(a-1)×(b-2)×(c-2)
所以大的長方體=(a+1)x(b+2)x(c+2)(a,b,c分別是挖去的長方體的長,寬,高)
我們可以只列舉a和b,用n/a/b求出c
但是,必須
n%a=0,n/a%b=0,a乘b乘c=n
但是我們列舉a的範圍是多少呢?
for
(long
long a=
1;a*a*a<=n;a++
)
因為n的長最小為1,所以是從1開始
因為a乘b乘c=n,是三個數相乘,所以迴圈的條件應該是a3
<=n
(如果a乘b乘c都》n了,那麼搜下去也就沒用了)
知道了a,我們再來看看b的範圍
for
(long
long b=a;a*b*b<=n;b++
)
從a開始,節省了時間
迴圈的條件也是三個數相乘
既然我們b從a開始,那麼我們的迴圈內容肯定也和普通的不同
m1=
min(
(a+1)*
(b+2)*
(c+2
),m1)
;m1=
min(
(a+2)*
(b+1)*
(c+2
),m1)
;m1=
min(
(a+2)*
(b+2)*
(c+1
),m1)
;m2=
max(
(a+1)*
(b+2)*
(c+2
),m2)
;m2=
max(
(a+2)*
(b+1)*
(c+2
),m2)
;m2=
max(
(a+2)*
(b+2)*
(c+1
),m2)
;
我們每種條件都要判斷一下,ab
c+1+2+2
+2+1
+2+2
+2+1
迴圈解決了,現在來解決輸出
cout<' '<2月29日普及c組第一題100分做法(正解)(李恪佳).wmv
ac**
#include
#include
using
namespace std;
long
long n,m1,m2;
intmain()
} cout<' '
}
2020.02.29模擬賽11(第一題)
2020.02.29模擬賽11(第二題)
2020.02.29模擬賽11(第三題)
2020.02.29模擬賽11(第四題)
2020.02.29模擬賽11(第五題)
2020.02.29模擬賽11(總結)
2020 02 29模擬賽11(總結)
t1 比賽時就知道怎麼做,但迴圈想了好久才明白,浪費了一些時間,最後ac t2知道是到模擬題目,根據題目模擬,比賽時ac t3不會做,沒有騙到分,比完賽聽講解才知道是spfa,才act4 比賽時打表打了40分鐘,後來改用乙個陣列自動建表,爆零,後來發現少了幾個特判,多了幾個if語句,才ac,又去嘗試...
2020 02 29模擬賽11(第四題)
題目描述 4和7是味味的幸運數字。幸運數是那些只由幸運數字組成的正整數。如47,477是幸運數,而5,17,417 就不是幸運數。定義next x 為大於或等於x的最小的幸運數。味味對以下表示式的值很感興趣 next l next l 1 next r 1 next r 現在告訴你l和r的值,希望你...
2020 03 14模擬賽16(第一題)
題目描述 fj的奶牛喜歡探索農場周圍的地形。一開始,所有n 1 n 1,000,000,000 只奶牛一起出發,但當碰到路口時,這一群牛可能會分成兩部分 不能為空 每一部分都繼續前進,當碰到另乙個路口時,再分成兩部分,如此反覆下去。假設路上到處都是新的岔口,計算最終被分成多少支隊伍。輸入第1行 兩個...