Educational Codeforces Round 163

yshpdyt發表於2024-03-19

鮮花

A

構造一個字串,滿足恰好有 \(n\) 個特殊字元,當一個字元恰好有一個與其相鄰的字元與其相等,則該字元相同。

一段相同的字元,長度超過 \(2\) 是沒有額外貢獻的,都是隻有兩個特殊字元。同時只放一個顯然是沒有特殊字元的。所以貢獻一段相同的字元只能是 \(2\),總的特殊字元個數只能是偶數,所以奇數一定無解。對於偶數,只需要來回交替 \(AA\)\(BB\) 即可。

B

長度為 \(n\) 陣列,陣列都是個位數或者兩位數,你可以選擇任意個兩位數,把它十位上的數和個位上的數按順序拆成兩個個位數,求能否使陣列單調不降。

暴力出奇跡,列舉每個位置拆或不拆,如果可以拆需要滿足如下條件:

\[a[i] \ge 10 \]

\[b[i-1] \le\frac{a[i]}{10} \]

\[\frac{a[i]}{10} \le a[i] \bmod 10 \]

多剪枝一下就過了。

C

有一個 \(2\)\(n\) 列的網格,每個格子上有一個向左或向右的箭頭(即 <>)。現在你從 \((1, 1)\) 開始移動,並遵循以下的移動方式,選擇一個上下左右走 \(1\) 格,但你需要保證不會走出網格,走完一步後,如果當前所在格為 <,則向左走 \(1\) 格,否則向右走 \(1\)​ 格。注意,你也需要保證這一步不會走出網格。請回答你能否到達 \((2, n)\)

直接暴力建邊跑寬搜,第一行編號 \(1 \sim n\),第二行建邊 \(n+1 \sim 2n\)

具體來說,對於第一行,如果左邊是 <\(i-2\) 建邊,否則不建,右邊是 >\(i+2\) 建邊,下邊是 <\(i+n-1\) 建邊,下邊是 >\(i+n+1\) 建邊。第二行同理。

然後判斷最後能不能到就可以了。

D

給定一個由小寫字母和問號 ? 組成的字串 \(s\),你可以將問號 ? 替換為任何小寫字母。
替換後,你需要找到 \(s\) 中最長的重複子串長度。一個重複子串是由兩個完全相同的字串拼接而成。

答辯題,可以 \(n^3\) 剪枝過。

首先一層迴圈列舉可能的答案長度,一定為偶數。

然後一層迴圈進行判斷,如何判斷?給每個位置開個棧,預處理出在此之前與該位置字元相同的下標與該位置的差,塞入佇列當中。此時只要有一個為問號,我們就認為兩個位置相同。

然後倒序列舉答案長度 \(2x\),維護每個位置棧頂小於等於 \(2x\),如果連著 \(x\) 個位置棧頂都是 \(x\),說明有解,這是因為這代表著有 \(x\) 個連著的位置,他們都與各自 \(x\) 位置前的字元相同,也就是找到了重複子串。

E

給定 \(n,k\),你需要構造一個 \(1\)\(n\) 的排列 \(a\),然後根據你的排列生成一張 \(n\) 個點的無向圖,其中邊 \((i,j)\) 存在當且僅當 \(abs(i-j)+abs(a_i-a_j) \leq k\)。你需要將這張圖劃分為若干張子圖,使每個點正好在一個子圖內且每個子圖均為完全圖(即其中任意兩點間均存在邊)。最小化子圖數量,並給出相應的子圖劃分方案與排列。

答辯打表找規律題。

首先一個子圖中最多隻有 \(k\) 個點,這是因為假設有 \(k+1\) 個點,肯定存在 \(abs(i-j)\ge k\),又 \(a\) 是排列沒有相同值,\(abs(a_i-a_j)\ge 1\),所以 \(abs(i-j)+abs(a_i-a_j) \ge k+1\),與已知條件矛盾,所以不可能成立。

得到了這點後,考慮 \(n=k\) 的情況如何解決。

F

不會字串,咕咕咕。

相關文章