2020 02 29模擬賽11(第一題)

2021-10-03 08:59:06 字數 2710 閱讀 7783

題目描述

味味有乙個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行 兩個...