C
題意:對於 \(i \in [2, n]\),給定 \(x_i = a_i \bmod a_{i - 1}\),構造一種符合條件的 \(a\),\(1 \le a_i \le 10^9\)。
分析 \(a_{i}\) 和 \(a_{i -1}\) 的大小關係。
-
\(x_i < a_i \longrightarrow a_{i - 1} < a_i\)。
-
\(x_i = a_i \longrightarrow a_{i - 1} > a_i\)。
為了不越界,\(a_i\) 和 \(a_{i - 1}\) 都要儘可能大。
於是可以從 \(n\) 往前構造。
- \(a_n = 10^9\)。
- \(x_i < a_i\),\(a_{i - 1} = a_i - x_i\)。
- \(x_i = a_i\),\(a_{i - 1} = 10^9\) 。
submission
D
最後一定是停在某個點不動,列舉最後停留的點即可。
submission
E
令 \((i, j)\) 表示第 \(i\) 行第 \(j\) 列。
-
若 \(j = 1\) 或 \(j = 2\),填 \((1, j)\)。
-
否則填 \((j, j)\)。
這樣 \(2n - 2\) 種長度都有了,從結論反推正確性很簡單。
submission
F
題意:給定序列 \(a\),每次詢問一對 \([l, r]\) 是否能劃分成大於 \(1\) 段使得各段異或值相等。
區間問題先轉化為字首異或。
-
\(s_r \oplus s_{l - 1} = 0\)。
題目保證了 \(l < r\),所以一定有解。
-
\(s_r \oplus s_{l - 1} = v\)。
-
一定劃分為奇數段。
-
如果能劃分成奇數段,則一定能劃分成 \(3\) 段。
-
最終劃分的異或值一定是 \(v\)。
於是問題轉變為是否能把 \([l, r]\) 分成三段,使得每段異或值都為 \(v\)。
找到最大的 \(i < r\) 使得 \(s_r \oplus s_i = v\),如果找不到則無解。
找到最大的 \(j < i\) 使得 \(s_i \oplus s_j = v\),如果找不到或 \(j < l - 1\) 則無解。
具體實現可以維護一個
map<int, vector<int>>
。 -
submission
G1
題意:將字串 \(s\) 劃分成 \(k\) 段,問每段的最長公共字首(\(\text{LCP}\))。
如果存在劃分使得 \(\text{LCP}\) 為 \(v\) ,則任意 \(v' < v\) 都存在劃分。
單調性存在,二分字首長度。
令字首字串為 \(t\),\(s\) 種最多有 \(tmp\) 個不相交的子串 \(t\)。
如果 \(tmp \ge k\),則存在劃分使得 \(\text{LCP}\) 為 \(t\)。
可以用 \(\text{kmp}\) 或字串雜湊求出 \(tmp\)。
submission