AGC040
A
模擬。
B
因為順序無關緊要,所以可以先把區間按右端點排序方便處理。
設第一個區間在\(A\)集合,考慮枚舉第一個在\(B\)集合的區間\(i\),這樣兩個集合的右端點\(\min\)就確定了。再考慮\(i\)后面的區間中左端點最大的那個,假設它在\(A\)集合,那么把\(i\)后面的區間都放進\(A\)集合一定不劣,\(B\)集合同理。也就是說,最優方案一定形如:要么一段前綴在\(A\)集合一段后綴在\(B\)集合,要么\(B\)集合只有一個區間。
C
首先可以黑白染色,偶數位置的\(A\)變成\(B\),\(B\)變成\(A\)。問題變成不能刪\(AA\)和\(BB\)。
然后我的想法是考慮刪除所有\(C\),要求存在一種刪除方案使得剩下的字符串中\(A,B\)個數相等,求合法字符串數,不太會做。然后我就打開了題解,發現我是個sb,其實只要字符串中\(A,B\)的個數分別\(\le \frac{n}{2}\)就行了。
D
對於一種排列,顯然滿足Ringo從\(p\)開始時Snuke能獲勝的\(p\)是一段前綴。
畫一條折線,\(x\)是距離,\(y\)是用時。那么將Ringo的折線垂直移動,使得它與Snuke的折線恰好有一個交點時,它與\(x\)軸的交點橫坐標就是最大的\(p\)。
枚舉\((p,0)\)處對應的是哪一條線段,設為\(k\)。考慮這么一條折線\(C\):
從\((p,0)\)出發,沿着Ringo的折線走到兩條折線的交點處,再沿着Snuke的折線走到\((n,s)\),其中\(s=\sum a_i\)。
容易發現每一種方案一定可以找出這么一條折線,且這么一條折線(從某個\((x,0)\)開始,先以斜率\(b_i\)向右上走,在某個點后變為以斜率\(a_i\)向右上走,走到\((n,s)\))能對應一種方案。\(p\)要盡量大,也就是說\(C\)要包含盡量少的線段,所以\(C\)上升的越快越好。
考慮一條放在\(k\)右邊的線段\(i\)。\(i\)最多使\(C\)上升\(\max(a_i,b_i)\),而這個上界是可以達到的,只要把\(a_i < b_i\)的放在兩折線交點前面,其他的放在交點后面即可。那么找出除\(k\)外\(\max(a_i,b_i)\)最大的若干個線段,假設有\(q\)個,要求\(b_k\)加這些線段的\(\max(a_i,b_i)\)之和\(\ge s\),且\(q\)盡量小。那么對於這個\(k\),\(C\)中包含線段數的整數部分就是\(q\),小數部分特殊計算一下即可。
E
先考慮簡化版本,如果只有1操作怎么做?顯然答案是\(a_i > a_{i+1}\)的個數。
再考慮原問題,考慮最終序列是怎樣形成的。可以發現每一個位置的數都是若干次1操作和若干次2操作加出來的。那么每一個\(A\)可以拆成\(x+y\),\(x\)表示1操作對這個位置的貢獻,\(y\)同理。那么問題就變成了,要決定序列\(x,y\),滿足\(x_i+y_i=A_i\),\(x_i > x_{i+1}\)有\(1\)的代價,\(y_i < y_{i+1}\)有1的代價,求代價最小值。
朴素的想法就是DP,\(f_{i,j}\)表示前\(i\)個數,\(x_i=j\)的最小代價。然后我又sb了,打開題解,顯然\(f_{i,0} \le f_{i,A_i}+2\),維護轉折點就行了。
F
可以規定兩點距離\(\ge 2\)時才能對較左邊的點用\(1\)操作,就變成了操作序列計數。
記\((x,d)\)表示較右邊的點在\(x\)處,兩點距離為\(d\)。那么操作有三種:
1.\(++x,++d\)。
2.當\(d \ge 2\)時,\(--d\)。
3.設置\(d=0\)。
1操作一定執行\(b\)次,考慮枚舉2操作的次數\(k\)。注意到一個合法的操作序列(合法定義為每次執行2操作時\(d \ge 2\))刪掉所有3操作后一定也合法,那么可以考慮先排列所有\(1,2\)操作,再往里面插入\(n-b-k\)個\(3\)操作。考慮\(3\)操作插在哪些位置可以使序列合法且最終兩點分別在\(a,b\)處。有幾點限制(以下\(d'\)指忽略所有3操作得到的\(d\)):
1.結束后\(d=b-a\)。這說明最后一次3操作之前一定滿足\(d'=a-k\)。
2.任意時刻\(d \ge 2\)。這說明如果要在某個\(d'=k\)的位置后面插入一個\(3\)操作,那么這個位置后面不能出現\(d' \le k\)的位置。
也就是說,可以在最后一次\(d'=0,1,2,\dots,a-k\)的每個位置后面插入任意多個3操作,要求\(d'=a-k\)后面至少插入一個3操作。注意到這與1,2操作具體是怎樣排列的無關,所以排列1,2操作和插入3操作是獨立的。排列1,2操作的方案數就是一個基礎的格路問題,插入3操作的方案數就是一個隔板法。