《演算法競賽高階指南》蚯蚓

2021-10-07 17:22:52 字數 2380 閱讀 9097

蛐蛐國最近蚯蚓成災了!

隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。

蛐蛐國裡現在共有 n 只蚯蚓,第 i 只蚯蚓的長度為 ai ,所有蚯蚓的長度都是非負整數,即可能存在長度為0的蚯蚓。

每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻,將其切成兩段。

若有多隻最長的,則任選乙隻。

神刀手切開蚯蚓的位置由有理數 p 決定。

乙隻長度為 x 的蚯蚓會被切成兩隻長度分別為 ⌊px⌋ 和 x−⌊px⌋ 的蚯蚓。

特殊地,如果這兩個數的其中乙個等於0,則這個長度為0的蚯蚓也會被保留。

此外,除了剛剛產生的兩隻新蚯蚓,其餘蚯蚓的長度都會增加乙個非負整數 q 。

蛐蛐國王知道這樣不是長久之計,因為蚯蚓不僅會越來越多,還會越來越長。

蛐蛐國王決定求助於一位有著洪荒之力的神秘人物,但是救兵還需要 m 秒才能到來。

蛐蛐國王希望知道這 m 秒內的戰況。

具體來說,他希望知道:

m 秒內,每一秒被切斷的蚯蚓被切斷前的長度,共有 m 個數。

m 秒後,所有蚯蚓的長度,共有 n+m 個數。

輸入格式

第一行包含六個整數 n,m,q,u,v,t,其中:n,m,q 的意義參考題目描述;u,v,t 均為正整數;你需要自己計算 p=u/v(保證 0第二行包含 n 個非負整數,為 a1,a2,…,an,即初始時 n 只蚯蚓的長度。

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。

輸出格式

第一行輸出 ⌊m/t⌋ 個整數,按時間順序,依次輸出第 t 秒,第 2t 秒,第 3t 秒,……被切斷蚯蚓(在被切斷前)的長度。

第二行輸出 ⌊(n+m)/t⌋ 個整數,輸出 m 秒後蚯蚓的長度;需要按從大到小的順序,依次輸出排名第 t,第 2t,第 3t,……的長度。

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。

即使某一行沒有任何數需要輸出,你也應輸出乙個空行。

請閱讀樣例來更好地理解這個格式。

資料範圍

1≤n≤105,

0≤ai≤108,

01秒後:乙隻長度為3的蚯蚓被切成了兩隻長度分別為1和2的蚯蚓,其餘蚯蚓的長度增加了1。最終4只蚯蚓的長度分別為(1,2),4,3。 括號表示這個位置剛剛有乙隻蚯蚓被切斷。

2秒後:乙隻長度為4的蚯蚓被切成了1和3。5只蚯蚓的長度分別為:2,3,(1,3),4。

3秒後:乙隻長度為4的蚯蚓被切斷。6只蚯蚓的長度分別為:3,4,2,4,(1,3)。

4秒後:乙隻長度為4的蚯蚓被切斷。7只蚯蚓的長度分別為:4,(1,3),3,5,2,4。

5秒後:乙隻長度為5的蚯蚓被切斷。8只蚯蚓的長度分別為:5,2,4,4,(1,4),3,5。

6秒後:乙隻長度為5的蚯蚓被切斷。9只蚯蚓的長度分別為:(1,4),3,5,5,2,5,4,6。

7秒後:乙隻長度為6的蚯蚓被切斷。10只蚯蚓的長度分別為:2,5,4,6,6,3,6,5,(2,4)。

所以,7秒內被切斷的蚯蚓的長度依次為3,4,4,4,5,5,6。

7秒後,所有蚯蚓長度從大到小排序為6,6,6,5,5,4,4,3,2,2。

(1) 本題題意較長這裡先簡化一下:我們首先由一組(n個)長度不一的線,進行m次操作每次挑選當前最大的線(x)切成兩段(xq)和(x-xq)並且除生成的兩個線條外的其他所有線都加乙個值p,然後把生成的兩條線放入這一組中;在繼續重複這樣的操作共m次。

(2)我們需要輸出的資料有,第一行每t個操作輸出切割之前的資料。

(3)在經過m此操作之後會得到n+m個資料,將其按降序輸出

#include

#include

#include

using namespace std;

int n,m,q,u,v,t;

const

int n=

100010

,m=7000010

;//n為原始資料上限,m為運算元據上限

int q1[n]

,q2[m]

,q3[m]

;//q1儲存原始資料,q2,q3分別儲存每次切割之後的兩端資料

int tt1,tt2=-1

,tt3=-1

,hh1,hh2,hh3;

//tt為q陣列的長度指標

//hh為q陣列的位置指標

int delta;

//將每次要加的數記錄在delta上用到的時候在加上

intget_max()

intmain()

cout<

for(

int i=

1;i<=m+n;i++)

cout<

return0;

}

演算法高階指南 蚯蚓 佇列

題目鏈結 給出 n 個蚯蚓,現在要執行 m 次切蚯蚓的操作,每次操作如下 選擇乙個最長的蚯蚓 l 如果有多個最長的,那就隨便選乙個,將這條蚯蚓切成兩段長為 lfloor l p rfloor l lfloor l p rfloor 的蚯蚓。除了這兩條新增加的蚯蚓,其他的蚯蚓會增加長度 q 現在問 m...

演算法競賽高階指南 0x12 佇列 蚯蚓

m次操作,每次都要將乙個最大的切成兩段,然後再加上乙個偏移量,然後將兩段全部放入佇列中,但是這樣是o mlogm 看題中資料範圍肯定會超時,那麼我就要繼續優化 我們可以發現,先將原序列從大到小排列 q1,q2,q3,q4 第一次肯定是切割q1,假設將q1切成了q1l,q1r,那麼對於第二次切割只需要...

《演算法競賽高階指南》 防曬

有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...