P6022 快樂水 題解

2021-10-05 05:11:13 字數 2587 閱讀 3573

同步

原題鏈結

簡要題意:一開始你有 n

nn 瓶快樂水,每擁有1

11 瓶快樂水就可以附帶 n

nn 個物件,第 i

ii 個物件有了 a

ia_i

ai​ 個就可以再獲得 1

11 瓶快樂水。不允許借代 / 賒賬,求最多得到的快樂水的瓶數,如果是無限多則輸出 inf

\text

inf.

這是洛谷一道月賽題的 t1t1

t1.首先,本人賽時並沒有想很多,當時只想著: t1t1

t1應該是水模擬吧,可是當時仔細想:m=5

m = 5

m=5 萬一死迴圈陷入環內,怎麼辦?萬一 inf

\text

inf 情況判不出來,怎麼辦?萬一被卡出 tle

\text

tle 怎麼辦?

但是我不心慌,決定一一解決。

實則真正意義上的模擬,是那種一眼看起來就是模擬水題,然後直接亂髮過掉的,而不是通過一定量思考發現可以模擬解決再過掉的,本題被評為橙題是不應該的,不應該。

死迴圈陷入環內這一問題是最棘手的。但是仔細想:每次你得到的快樂水瓶數隻會越來越多,越來越多,從來不存在少的情況。如何判斷結束呢?乙個快樂水也衍生不出來就可以結束了。

那麼如何判斷無限情況呢?很顯然,無限當且僅當所有 a

ia_i

ai​ 相等 且 ai≤

na_i \leq n

ai​≤

n.為什麼呢?因為,如果所有 a

ia_i

ai​ 都相等並且第一次可以衍生的話,首先之後每次操作 a

ia_i

ai​ 都相等,然後每次衍生出的 m

mm 個都會再產生,再產生 ⋯

⋯\cdots \cdots

⋯⋯所以是無限的,具體不懂可以看看樣例。

這一切都解決之後,我們想一想 tle

\text

tle 問題該怎麼辦?

可是你想想,真會 tle

\text

tle 麼?

我們需要構造一組資料使得借和還的次數最多!

這裡美妙優秀的 wyxkk

\text

wyxkk

出題人給出了一組美妙無比的 hack

\text

hack

資料:

10000 5

2 3 7 43 1807

其構造方法在於,ai=

(∏j=

1i−1

aj)+

1a_i = \big( \prod_^ a_j \big) + 1

ai​=(∏

j=1i

−1​a

j​)+

1,並且 ai=

2a_i = 2

ai​=2.

經過實測,這個資料會達到 2.8×1

07

2.8 \times 10^7

2.8×10

7 次!(答案達到 3×1

010

3 \times 10^

3×1010

,需要部分開啟 long long

\text

long long

)當然如果 m=6

m=6m=

6 模擬就無力解決啦。

時間複雜度:o

(wys

)o(\text)

o(wys)

.(大概很優秀吧)

實際得分:100pt

s100pts

100pts

.

#pragma gcc optimize(2)

#include

using

namespace std;

inline

intread()

int x=0;

while

(ch>=

'0'&& ch<=

'9') x=x*

10+ch-

'0',ch=

getchar()

;return x*f;

}int n,m;

long

long ans=0;

int a[6]

,b[6

],c[6]

;long

long l;

bool x=0;

//無限情況

inline

void

check()

//當前瓶數為 b , a 是初始陣列 , l 記錄多出來的瓶數

intmain()

//做標記if(

!f)//如果 c[i] = b[i] 則說明一次之後根本沒變 , 是無限情況}if

(x)printf

("inf");

else

printf

("%lld\n"

,ans)

;return0;

}

P1057 傳球遊戲(DP水題)

上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 nn個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師再次吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個...

P1346電車 最短路水題

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另...

P1338 末日的傳說 水題

只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...