原題傳送門
此題非常優先佇列,非常裸
但是資料規模似乎在暗示我們甚至有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表示每一次被切的蚯蚓被分開的較短的那一部分。我們先把原序列排序,因為不管怎麼切,先被...