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