NOIP2016 蚯蚓 佇列 單調性優化

2021-08-26 14:39:45 字數 1401 閱讀 2378

傳送門

努力刷完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...