哪吒汽車公佈哪吒 S 內飾官圖:17.6 英寸中控屏、12.3 英寸副屏、AR-HUD
A 比較 naive。F 棄了。
B - Dividing Subsequence
給定兩個 \(n\) 的排列,求最大的 \(k\),滿足能夠分別選出兩個長度為 \(k\) 的子序列,使得 \(a_i|b_i\)。
直接對應連邊發現邊數是 \(O(n\log n)\) 的。
然後就是對應位置不交錯最大匹配的問題,考慮將有序對 \((i,-j)\) 排序,然後求 \(j\) 的最長上升子序列即可。
C - Row Column Sums
填充 \(n\times m\) 的表格,滿足均 \(\in [0,P)\)。
且在 \(\bmod P\) 意義下,每行的和為 \(a_i\)
,每列的和為 \(b_i\),最大化全域性和。
感覺這種猜結論題做多了不是很有利於訓練,不過挺有趣的。
有解的充要條件是 \(\sum a=\sum b\)。
先令所有數為 \(P-1\),然後求出每一行需要調整的量之和,每一列需要調整的量之和。
那麼最終減少的量就是兩者的 \(\max\)。
構造方法考慮,如果行列均需要 \(-1\) 那就減小這個格子,然後不妨設行需要再減,這個此時減少的數一定是 \(P\) 的倍數。
那麼不難用在同一行 \(+1,-1\) 的方法將所有需要減小的數調整至同一列,這一列直接減小就完了。
D - Range XOR
求 \(L\leq l\leq r\leq R\)
且 \(l\bigoplus (l+1)\bigoplus\cdots\bigoplus r=V\) 的 \((l,r)\) 數。
首先拆成字首和,即 \(s_r\bigoplus s_{l},(L-1\leq l<r\leq R)\)。
然後打個表,發現 \(s_i\) 很有規律:
- \(i=4k+0,s_i=i\)。
- \(i=4k+1,s_i=1\)。
- \(i=4k+2,s_i=i+1\)。
- \(i=4k+3,s_i=0\)。
發現需要討論 \(16\) 種情況,實際只要討論二進位制前兩位,然後用簡潔的數位 DP 就可以得到答案。
const int P = 998244353; int f[60][2][2][2]; void Pl(int &x, int y) {x += y; if(x >= P) x -= P;} int main() { LL L, R, V; scanf("%lld %lld %lld", &L, &R, &V), L --; int ans = 0, num[4] = {0, 1, 3, 0}; rep(a, 0, 3) rep(b, 0, 3) if((num[a] ^ num[b]) == (V & 3)) { memset(f, 0, sizeof(f)); f[1][a >= (L & 3)][a < b][b <= (R & 3)] = 1; rep(i, 2, 59) rep(j, 0, 1) rep(k, 0, 1) rep(l, 0, 1) rep(x, 0, 1) rep(y, 0, 1) if(f[i - 1][j][k][l] && (((a % 2 ? 0 : x) ^ (b % 2 ? 0 : y)) == (V >> i & 1))) { int Lt = L >> i & 1; int Rt = R >> i & 1; Pl(f[i][x > Lt || x == Lt && j][x < y || x == y && k][y < Rt || y == Rt && l], f[i - 1][j][k][l]); } Pl(ans, f[59][1][1][1]); } printf("%d\n", ans); return 0; }
E - Cyclic Medians
給定 \(n,m,V,S\),對於任意長度分別為 \(n,m\) 的序列 \(A,B\),求操作結束的結果之和。
操作為:
- 初始滿足 \(a_i,b_i\in[0,V),x=S\)。
- 對於 \(i=0\sim n\times m-1\),令 \(x\gets \text{medium}(x, a_{(i\bmod n)+1},b_{(i\bmod m)+1})\),即變為三者的中位數。
- 得到最終的 \(x\) 為結果。
考慮如果給了你 \(A,B\) 序列,怎麼儘量快的判定最終結果。
中位數套路的二分答案,然後變為了 \(0,1\) 問題,顯然若有 \((x,0,0)/(x,1,1)\) 的局面出現,那麼此時 \(x=0/1\)。
只有不發生這種情況時,\(x\) 可以維持原數。
這對計數是很有利的,因為對於每個 \(k\in[0,V)\),求出 \(\geq k\) 的局面和就做完了。
而對於不能維持原數的情況,\(0/1\) 明顯是對稱的局面(考慮翻轉後一一對應),那麼就是 (總局面 - 不動局面) / 2。
問題變為求任意時刻沒有一對 \(a_i=b_j\) 的方案數。
簡單數論知識發現,按照 \(\bmod \gcd(n,m)\) 的等價類分類,同序列的等價類相等,不同序列不等。
設 \(g=\gcd(n,m)\),對於列舉的 \(k\),不動點方案數顯然是:
\[\displaystyle (k^{n/g}\times (V-k)^{m/g}+k^{m/g}\times (V-k)\times ^{n/g})^g \]直接列舉 \(k\) 計算即可。