題解 LuoGu2827 蚯蚓

2021-09-29 15:22:28 字數 1695 閱讀 9012

原題傳送門

此題非常優先佇列,非常裸

但是資料規模似乎在暗示我們甚至有o(n

)o(n)

o(n)

寫法驚訝地發現題目中的乙個隱含性質

先切的蚯蚓一定比對應的後切的蚯蚓長

維護3個佇列,分別表示沒切過,∗p,

∗(1−

p)

*p,*(1-p)

∗p,∗(1

−p) 3組蚯蚓

因為單調,每次比一比隊首彈出,隊尾插入

再是用到乙個思想,既然每秒都加q,不如要用的時候統一加上乙個kqkq

kq,那麼中途插入的也必須先減去kqkq

kq下證隱含性質正確性:

設兩蚯蚓a,b

(a

>b)

a,b(a>b)

a,b(

a>b)

某時刻a

aa被切了,過了t

tt秒,b

bb被切了

b

bb被切時,a

aa被切成的兩隻蚯蚓長度分別為pa+

tq,(

1−p)

a+tq

pa+tq,(1-p)a+tq

pa+tq,

(1−p

)a+tqbb

b被切成兩條p(b

+tq)

,(1−

p)(b

+tq)

p(b+tq),(1-p)(b+tq)

p(b+tq

),(1

−p)(

b+tq

)也就是pb+

ptq,

(1−p

)b+(

1−p)

tq

pb+ptq,(1-p)b+(1-p)tq

pb+ptq

,(1−

p)b+

(1−p

)tqpa+

tq

>pb

+ptq

,(1−

p)a+

tq

>(1

−p)b

+(1−

p)tq

pa+tq>pb+ptq,(1-p)a+tq>(1-p)b+(1-p)tq

pa+t

q>pb

+ptq

,(1−

p)a+

tq>(1

−p)b

+(1−

p)tq

證畢。長度是不是完美地被a吊打?

code:

#include

#define maxn 10000010

#define ll long long

using

namespace std;

ll a[maxn]

, b[maxn]

, c[maxn]

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

int la, lb, lc, ra, rb, rc;

inline

intread()

bool

cmp(ll x, ll y)

ll pop()

intmain()

puts(""

);for(

int i =

1; i <= n + m;

++i)

return0;

}

luogu 2827 蚯蚓(快速哈夫曼樹 佇列)

重要的寫在前面 本題 在vijos上能夠跑過,但是在洛谷評測時會因為卡常而tle掉幾個點。請不要模仿此 另外,本人在寫 時使用了c 自帶的queue,導致基本無法進行除錯,還不如手寫乙個佇列好,算是乙個教訓吧。題目描述 本題中,我們將用符號 c 表示對c向下取整,例如 3.0 3.1 3.9 3。蛐...

蚯蚓 P2827 蚯蚓

本題中,我們將用符號 c lfloor c rfloor c 表示對c向下取整,例如 3.0 3.1 3.9 3 lfloor 3.0 rfloor lfloor 3.1 rfloor lfloor 3.9 rfloor 3 3 0 3.1 3 9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓...

洛谷p2827蚯蚓題解

題目 演算法標籤裡的演算法什麼的都不會啊 什麼二叉堆?qbxt出去學習的時候講的,一段時間之前做的,現在才寫到部落格上的 維護3個佇列,佇列1表示最開始的蚯蚓,佇列2表示每一次被切的蚯蚓被分開的較長的那一部分,佇列3表示每一次被切的蚯蚓被分開的較短的那一部分。我們先把原序列排序,因為不管怎麼切,先被...