哇!濟南的 rqy 大佬講課!就是 $luogu$ 上有名的那位!
上面這句話寫錯了,請大家無視
Xylophone
IOI2018 練習賽 T2
題意:交互提
有一個 $0\sim n-1$ 的排列,保證 $0$ 在 $n-1$ 左邊。
你每次可以詢問一個區間,會得到這個區間的 最大值 $-$最小值。
要用不超過 $10000$ 次詢問還原出這個排列。
范圍:
子任務 $1$($11pts$)$n\le 100$
子任務 $2$($36pts$)$n\le 1000$
子任務 $3$($53pts$)$n\le 5000$
題解
假設 第一個數 $<$ 第二個數,不妨假設第一個數是 $0$,之后再調整即可。
考慮詢問所有長為 $2$ 的區間和長為 $3$ 的區間。
從左往右,考慮連續三個數 $x,y,z$,假設我們已經確定了 $x,y$ 的大小關系,那么
如果 $x,y,z$ 中最大值-最小值=$x-y$,說明 $z$ 在 $x,y$ 中間,根據 $y,z$ 的差可確定 $z$。
否則 $z$ 在 $x,y$ 之外,同樣可根據 $y,z$ 的差確定 $z$。
$O(n)$ 枚舉前兩個數,然后 $O(n)$ 推出序列剩下的數。排除不合法的解后(即序列的值域不在 $[0,n-1]$ 范圍內),如果一組合法的解中,$0$ 在 $n-1$ 的右邊,把每個數 $x$ 變為 $n-x-1$ 即可。
設第一個數為 $0$,然后 $O(n)$ 推出序列剩下的數。假設序列的值域是 $[x,x+n-1]$,把序列中的所有數 $-x$ 即可得到值域正常的序列。然后如果這組解中,$0$ 在 $n-1$ 的右邊,
Bubble Sort 2
IOI2018 練習賽 T3
題意:
給出一個長為 $n$ 的序列。
定義一次“挪動”操作為:從前往后考慮每個數,若 $A_i\gt A_{i+1}$ 就交換 $A_i$ 和 $A_{i+1}$。
現在有 $q$ 次修改操作,每次修改一個數,然后回答整個序列需要多少次“挪動”操作才能把序列排成升序。
范圍:
$n,q\le 500000$
題解
~~冒泡排序裸題~~
首先考慮怎么計算答案。
觀察冒泡排序的過程,可以發現每一輪做完之后,每個數前面的最大數(如果比它大的話)都會被放到它后面去。
於是答案應該是 $\max\{一個數前面比它大的數的個數\}$,也就是 $\max\{i-前面\le A_i 的數的個數\}$
可以用樹套樹或 $KDTree$ 維護,復雜度都爆。
注意到如果前后有兩個數 $x,y$,$x\ge y$,那么 $x$ 是不可能成為答案的,因為此時 $x$ 的答案嚴格小於 $y$ 的答案。
把剛才的式子改成 $\max\{i-\le A_i 的數的個數\}$
當 $x$ 后面還有比它小的數時,會多減導致不優,但此時 $x$ 一定不會成為最優答案。
這樣就可以用一顆線段樹維護了,復雜度 $O(n\times log(n))$。
Road Service
IOI2018 練習賽 T4
題意:提答題
給出一棵 $n$ 個點的樹,需要你加 $k$ 條邊,使得所有點對之間的距離和最小。所有邊長均為 $1$。
根據你的答案給分。
范圍:
子任務 $1$($10pts$):$n=20,\space k=4$
子任務 $2$ 到 $5$ 不抄了,每個任務的分值都是 $18pts$。
子任務 $6$($18pts$):$n=1000\space k=300$
題解:
枚舉一個點,把 $k$ 條加邊都從這個點連出去,這樣可以得到很優的答案。
證明:把 $k$ 條邊的公共出發點設為根節點,
爬山?
考慮選出的 $k$ 個點的集合,隨機進行調整,如果更優就記錄下來。
任軒迪在模擬賽爬了 $91$ 分,試機賽爬了 $99$ 分……
$DP$?
假裝我們是要選出 $k$ 個關鍵點,使得所有點到關鍵點的距離最小。
不考慮兩點直達的情況。
再假裝最優解里每個點到最近的關鍵點的距離不會太大(比如不超過 $10$)。
於是可以多項式時間 $DP$ 了,可以得到 $100$ 分。
組合動作(Combo)
IOI2018 D1T1
題意:交互提
有一個長為 $n$ 的只由 $ABXY$ 組成的字符串 $S$,保證 $S$ 的首字母只出現一次。你每次可以詢問一個只由 $ABXY$ 四種字符組成的、長度不超過 $4n$ 的串 $p$,他會告訴你既是 $p$ 的子串又是 $S$ 的前綴的最長串的長度。需要你用最少的詢問次數確定這個串 $S$。
范圍:
見原題
首先用 $2$ 次詢問確定首字母(默認你會二分)。
設已知的前綴是 $s$,每次詢問 $sB$,如果不是就詢問 $sX$,如果再不是就是 $sY$。
這樣的步數是 $2n$,可以拿 $30$ 分。
注意我們可以把多個串連在一起,在一次中詢問。由於首字母只會在 $S$ 中出現一次,回答出來的就是我們問的串的答案中的最大值。
仍然用 $2$ 次詢問確定首字母,假設為 $A$。
考慮如何確定下一位,可以詢問這個串:$sBsXBsXXsXY$。
如果詢問結果是 $s$ 的長度 $+1$,下一位就是 $B$,如果是長度 $+2$,下一位就是 $X$,否則下一位就是 $Y$。
最后一步要多花一步特判,總共需要 $n+2$ 步,可以拿到 $100$ 分。
然而任軒迪大佬在考 $IOI2018$ 的時候用的方法跟這方法不太一樣……
狼人(Werewolf)
IOI2018 D1T3
現在相當於求是否有一個點既在第一棵子樹中,
相當於詢問是否存在一個中間點 $X$,
排座位(Seats)
題意
有一個 $H\times W$ 的矩陣,里面是 $0\space \sim\space H\times W-1$ 的一個排列。
如果一個大小為 $k$ 的子矩陣里面恰好包含的是 $0\space \sim\space k-1$ 這 $k$ 個數,則稱這個子矩陣是美妙的。
現在有 $q$ 個操作,每次交換兩個點上的數,然后詢問總共有多少個美妙的子矩陣。
范圍
見原題
子任務 $1,2$
從小到大考慮每個元素的位置。求出前 $i$ 個數的橫縱坐標的最大值和最小值。
子任務 $4$
注意到兩人的位置交換后,只有處於它們之間的 $max_x,min_x,max_y,min_y$ 會變。
所以修改后只需要把中間這些信息暴力重算即可。
子任務 $3$
合法的矩陣不超過 $H+W$ 個。
考慮從 $1$ 所在位置開始,如果下一個數不在當前矩形里,那么長或寬至少要 $+1$。
復雜度 $O(2000\times Q)$。
到此為止,$IOI2018$ 現場大部分人拿了上述 $37$ 分。
子任務 $5$
相當於詢問前 $k$ 個數是否構成一個連通塊。由於 $H=1$,$k$ 個數當前連成一條鏈。
即詢問“點數-邊數”是否等於 $1$。點數就是 $k$,邊數就是方塊中兩個數都 $\le k$ 的 $1\times 2$ 大小方塊數量。
對於每個 $k$ 維護這個數量,一次修改時只會影響常數個 $1\times 2$ 方塊(就是它所在的倆),對應到線段樹中就是后綴加減操作。
詢問線段樹最小值及最小值的個數即可。
復雜度 $O(HW+Qlog(HW))$。
子任務 $6$
考慮沿用子任務 $5$ 的思想,相當於詢問前 $k$ 個數是否構成一個連通塊,且這個連通塊是一個矩形。
不妨稱 $\le k$ 的點為黑點,$\gt k$ 的點為白點。可以判斷以下條件:
- 左邊和上邊都不是黑點的黑點有恰好 $1$ 個
- 上下左右有至少 $2$ 個黑點的白點只有 $0$ 個
條件 $1$ 保證了是一個連通塊,條件 $2$ 保證了是個矩形。
注意到條件 $1$ 中合法的不會 $\lt 1$ 個,條件 $2$ 中合法的不會 $\lt 0$ 個,於是只要加起來看是否 $=1$ 就行了。
對於每個 $k$,
Rainbow
APIO2017 T1
題意:
有一個 $R\times C$ 的網絡,有一條蛇,它從 $(r,c)$ 出發,按照給出的一個長為 $m$ 的移動序列往上下左右移動。它經過的格子都會變成河流。
現在有 $Q$ 次詢問:給出一個子矩形,問這個子矩形內的陸地有多少個四連通塊?
范圍:
見原題
題解:
稱河流為黑點,陸地為白點。那就是問一個子矩形內有多少白點構成的四連通塊。
如果每個連通塊都是樹,那么連通塊的數量就等於 點數 $-$ 邊數。
這題是網格圖,考慮“白點數量”$-$“$1\times 2$ 的白矩形數量”$-$“$2\times 1$ 的白矩形數量”$+$“$2\times 2$ 的白矩形數量”。
當且僅當白點包了一個環把黑點包住時會多減 $1$。
由於黑點是連通的,只有這種情況要特判。判下黑點橫縱坐標最大最小值
注意到雖然網格很大,但我們只需要關心黑點旁邊那一圈點,只有 $O(m)$ 個。
每一類信息都用總數減去不合法的方案數就可以了。用主席樹維護矩陣信息。
復雜度 $O((m+Q)\times log(R+C))$。
Rikka with Consistency
2018-2019, Xuzhou Regional Contest, C
題意:
有一條折線,拐點坐標為 $(i,H_i)$。其中 $H_0=H_n=0$。
Rikka with Data Structures
2018-2019, Xuzhou Regional Contest, E
題意:
維護一個序列,支持:
1.區間加
2.區間賦值
3.給出 $x$ 和一個區間 $[l,r]$,問 $[l,r]$ 中有多少個 $y$,滿足 $A[x...y]$ 的最大值 $=$ $\max(A[x],A[y])$。
范圍:
$n,m\le 10^5$
題解
不妨假設 $x$ 在 $[l,r]$ 左邊。如果 $x$ 在 $[l,r]$ 中只要拆成兩個區間就可以了。
考慮 $[x,l]$ 中的最大值 $v$,那么從 $v$ 開始的不遞減序列顯然每個都合法。
如果 $v=A[x]$,那么從 $l$ 開始直到第一個 $\gt v$ 的位置
現在相當於對於一個區間 $[l,r]$,從 $v$ 開始,從左往右每次跳到下一個 $\ge$ 它的位置,求能跳幾次、出來是什么。
線段樹維護每個區間最大值、右區間內從左區間的最大值開始跳能跳幾次、出來是什么。
詢問時通過討論 $v$ 和左區間最大值的關系就可以遞歸到左右。復雜度 $O(log(n))$。
Rikka with Sorting Networks
2018-2019, Xuzhou Regional Contest, I
題意
按順序給出 $k$ 個排序網絡的比較器 $(u,v)$,即若 $A[u]\gt A[v]$ 就交換 $u,v$。
問多少 $1\sim n$ 的排列經過這個網絡之后,最長上升子序列長度至少為 $n-1$。
范圍
$100$ 組數據,$n\le 50,\space k\le 10$。
題解
最長上升子序列長度至少為 $n-1$ 的排列只有 $O(n^2)$ 個。
排序網絡本質上是如果滿足一些大小關系就進行一些交換。
兩個不同的排列經過排序網絡,如果每次比較的結果都相同,那么出來的仍然是兩個不同的排列(進行的交換相同)。
那么直接枚舉最終的排列,$O(2^k)$ 枚舉每個比較器的比較結果,倒着推上去看看是否會矛盾就可以了。
復雜度 $O(T n^2 2^k)$。
此處跳過一道插頭 $dp$ 裸題($rxd$ 大佬幾句話帶過了)。
Tournament
2018-2019, Qingdao Regional Contest, F
題意
有 $n$ 個騎士,要進行 $k$ 輪決斗。每輪決斗中,每個騎士都要和另一個騎士單挑。需要滿足:
1. 任意兩個騎士在 $k$ 輪決斗中最多只會單挑 $1$ 次。
2. 如果對於兩場決斗 $i\lt j$,在第 $i$ 場中 $A$ 和 $B$ 單挑,$C$ 和 $D$ 單挑,那么在第 $j$ 場中若 $A$ 和 $C$ 單挑,則 $B$ 必須和 $D$ 單挑。
請你給出一個字典序最小的解或輸出無解。
范圍
$n,k\le 1000$
題解
爆搜或者手玩一下,然后觀察一下:
1-2 3-4 5-6 7-8
1-3 2-4 5-7 6-8
1-4 2-3 5-8 6-7
1-5 2-6 3-7 4-8
1-6 2-5 3-8 4-7
1-7 2-8 3-5 4-6
1-8 2-7 3-6 4-5
可以發現構造策略就是第 $i$ 次 $1$ 和 $i+1$ 打,然后到 $2$ 的冪次為止的值都可以由前面的信息確定出來。再往后平移一下就可以了。
由此也可以知道當且僅當 $k\ge lowbit(n)$ 時無解。
Counting Sheep in Ami Dongsuo
2018-2019, Shenyang Regional Contest, F
題意
有一張 $n$ 個點的拓撲圖,每個點有個權值,權值不超過 $w$。
有三個人要從同一個點出發,走三條不同的路線。這種方案的權值就是他們最后停在的那三個點的權值和。
對於 $k=0\sim 30000$,問權值為 $k$ 的方案有多少種。膜 $10^9+7$。
范圍
$n\le 10000,\space m\le 30000,\space w\le 400$
題解
三條路線要不同的限制,只要容斥一下就行了。
考慮求從一個點出發,三個結束點權值為 $w$ 的方案數。
直接做就是個卷積,$O(mwlog(w))$。
可以把 $1\sim 3w$ 拿進去求點值,
Cherry and Chocolate
2018-2019, Nanjing Regional Contest, C
現在假設已經有了一個方案 $(x,y,z)$,考慮被控制的點的集合:
- $x$ 除了 $y$ 所在子樹外的所有子樹
- $y$ 的 $z$ 所在連通子圖
如果 $x$ 往 $y$ 以外的方向移動,$B$ 可以保持 $y$ 不變,這樣若 $z$ 是 $y$ 的父親,答案不變,否則答案變小,對 $A$ 不利。
Huge Discount
2018-2019, Nanjing Regional Contest, H
題意
有一個長為 $10^5$ 的只含 $0,1,2$ 的數字串,
Lagrange the Chef
2018-2019, Nanjing Regional Contest, L
題意
給出 $n,X,Y$ 和 $n$ 個數 $A_i$,要通過若干次把某個數移動到
考慮如果有一對相鄰的 $X,Y$,如何處理:
- 拿一個不是 $X,Y$ 的數夾到它們中間
- 把 $X$ 或者 $Y$ 放到別的地方去
觀察第二種操作可以放到什么地方去,由於連續的一段 $X$ 和一個 $X$ 完全等價,所以顯然
於是可以 $DP$ 了:$dp_{i,j,x,y,0/1/2}$ 表示考慮了前 $i$ 個數字、“用來夾到后面的 $XY$ 中間的數”減去“前面的 $XY$ 尚待用后面的數夾的”個數為 $j$,
Immortal ...Universe
2018-2019 ACM-ICPC, Asia East Continent Finals, E
題意
有兩個長度為 $n$ 的、由 $P$ 和 $V$ 構成的序列。一個人從
題解
觀察到有可能輸的充要條件是存