8.26 模擬賽(NOIP十三連測 #7)

2huk發表於2024-08-27

2024--夢熊&太戈--NOIP十三連測 #7【訂正】 - 比賽 - 夢熊聯盟 (mna.wang)

總結

T1 基本和 CF1245F 相同。很快就寫完了。

T2 題意特別難懂,模擬了很長時間後題意還是有些暈,就先放棄了。

T3 相較於 T2 看上去簡單的多,先衝 T3。

特殊性質 \(A\)\(50\) 分,這可能是正解的關鍵。嘗試打表找規律無果。\(50\) 分實在是太多就意味著它和正解的難度是接近的。

這期間寫了 \(n \le 2\) 的,本來想拿 \(10\) 分,結果 \(30\) 分???????

T4 看起來也可做,打了 \(n \le 500\) 的,這是一個預處理前字尾的簡單技巧。不知道 \(a_i \le 20\) 咋做。

給 T2 時間只有 20 分鐘,感覺 \(30\) 分寫不出來了,就沒寫。

總結:

  1. 你沒有做出 \(3\) 題或 \(4\) 題的實力。如果這兩道題中存在一個部分分的分值很大(比如 T3 的 \(50\) 分)就不要死磕這檔分。因為這實在太難。
  2. 如果一個題的題意很複雜,先寫根據題意寫一個暴力(比如 T2 的 \(30\) 分)。寫暴力的時候可以幫助你理解題意,而且寫完之後關掉題面,照著暴力程式碼思考最佳化,可能會更方便些。
  3. 非正解(部分分)的找規律時間不要太長。

A. pair

題意

\(\sum_{x=0}^N\sum_{y=0}^N [x\mid y = x \oplus y]\)

\(N \le 2^{10^6}\)

做法

注意到 \(x\mid y = x \oplus y\) 等價於 \(x \operatorname{and} y = 0\)。於是 CF1245F

B. tree

不會。

C. mod

題意

給定長度為 \(n\) 的正整數序列 \(a\),夢夢給出了以下函式:

void mod(int x){
	for(int i=1;i<=n;i++) a[i]=a[i]%x;
}

你可以執行這個函式任意次,且每次呼叫函式的引數可以任意指定,但要求呼叫的引數 \(x\) 為正整數,請問最終可以得到多少種不同的 \(a\) 序列。模 \(998244353\)

性質 \(A\) 思路

每次操作選擇的 \(x\) 一定越來越小。

對於初始的兩個相鄰的數 \(k,k+1\),將它們模 \(x\) 後,它們要麼仍相差 \(1\)(即變成 \(k \bmod x, k \bmod x + 1\)),或變成 \(x-1,0\)

若再模一個 \(y\),有可能仍相差 \(1\),有可能變成 \(k \bmod x \bmod y,0\)

也就是說如果最終能得到序列 \(a\),且最後一次操作的數是 \(x\),等價於:

  • \(\forall 1 \le i \le n\)\(0 \le a_i < x\)

  • \(a_1=1,a_2=2,\dots,a_{x-1}=x-1,a_x = 0\)

  • \(\forall x + 1 \le i \le n\)\(a_i = 0\)\(a_i = a_{i-1}+1\)

列舉 \(x\)。然後 DP 即可。設 \(f(i, j)\) 表示考慮前 \(i\) 個位置且 \(a_i = j\) 的方案,轉移極易。

此時你發現輸出答案比標準答案少 \(1\)。這是因為你少考慮了一次操作都不進行的情況。

正解

不會。

D. divide

\(n \le 500\) 可以預處理前字尾的 DP 的答案。我的實現裡預處理 \(n^2\),求答案 \(n^3\)

\(a_i \le 20\) 直接最佳化上一個 DP。因為長度 \(\ge 20\) 的區間一定合法。程式碼不太好寫。

正解是神秘 cdq 最佳化 DP。不會。