傳送門
努力刷完noip提高組題目ing…
50~60分演算法:直接用堆/優先佇列模擬
100分演算法:觀察題目,發現其中隱含的單調性。
設兩條蚯蚓長度為a,b
a,ba,
b,其中a
>
ba > b
a>b。
則a
aa被切掉時長度分別為pa,
(1−p
)a
pa, (1 - p)a
pa,(1−
p)a,過t秒之後長度為pa+
tq,(
1−p)
a+tq
pa+tq, (1 - p)a +tq
pa+tq,
(1−p
)a+t
q此時b
bb被取出,長度b+t
qb + tq
b+tq
,被切之後長度分別為p(b
+tq)
,(1−
p)b+
tq
p(b + tq),(1 - p)b + tq
p(b+tq
),(1
−p)b
+tq顯然a的兩段長度還是大於b的兩段。
由此,我們可以建立3個佇列,分別是沒切過的蚯蚓,切過之後較長的一段蚯蚓,切過之後較短的一段蚯蚓。
注意細節。
#include
#include
#include
using
namespace std;
int q[3]
[20000001
], l[3]
, r[3]
;inline
intread()
inline
bool
cmp(
int a,
int b)
inline
intfind_max()
intmain()
sort
(q[0]+
1, q[0]
+ n +
1, cmp)
; l[0]
=1, r[0]
= n;
l[1]
= l[2]
=1, r[1]
= r[2]
=0;int tag =0;
for(
int i =
1; i <= m; i++
)printf
("\n");
for(
int i =
1; i <= n + m; i++
)return0;
}
noip2016 蚯蚓 單調佇列
去年提高組的day2t2,很容易有種讓人看到就會想到用堆的做法,但是堆的時間複雜度顯然是不夠的 雖然可以拿到85分,暴力打得好的話 所以就像之前做那道合併果子一樣的,想到了單調佇列的做法。可以把原來的蚯蚓按照從大到小的排序放在第乙個佇列裡面,然後每一次切蚯蚓,把第一部分放在第二個佇列中,第二部分放第...
noip2016 蚯蚓 佇列
傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...
noip2016 蚯蚓 佇列
傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...