Chef and Maximum Star Value
顯然如果一個數後面有它的因數,那麼它一定不可能是最大值。先從後往前枚舉一遍把這些數去掉,再從前往後做一遍,每個數枚舉它所有倍數統計即可。
因爲每個數最多隻會做一次,時間複雜度是 O(TAilogAi) 。
代碼
Array Modification
考慮每次遍歷對於每一對 (a,b) 的影響:
(a,b)→(a xor b,a)→(b,a xor b)→(a,b)
所以判下總共會有幾次完全遍歷 0 到 n−1,再把剩下的做一次就可以了。
要特判 i=n−i−1 的情況。
時間複雜度 O(TN) 。
代碼
Even Edges
對於 k≥4 的情況,如果某 2 組點間有偶數條邊,那麼顯然可以將它們合併。如果所有組之間都是奇數條邊,那麼任意選出 4 組合併成 1 組,這一組的邊數也是偶數。
因此 k≤3 。
當 m 爲偶數時顯然 k 即爲 1 。
否則,若原圖中有一個點度數爲奇數,將它隔離後剩下的點的邊數即爲偶數,於是 k=2 。
而若原圖中所有點度數都爲偶數,那麼無論怎麼隔離出一組點,其與剩下的點間的邊數一定是偶數,所以不可能 2 組點內部的邊數都爲偶數。此時 k=3 。
至於 k=3 時求出一個合法的答案,只需要找出一條邊 (u,v), u、v、剩下的點各成一組即可。
代碼
Bacterial Reproduction
對於非葉子節點 u,它某個祖先 v 在 t0 時刻的操作對它在 t1產生影響的條件是 t1=t0+du−dv,即 t1−du=t0−dv 。
如果 u 是葉子節點,就變爲 t1−du≥t0−dv 。
那麼離線之後遍歷一遍樹,記錄下這些值就好了。
時間複雜度 O(N+Q) 。
代碼
Queries on Matrix
假設最終有 r 行被加了奇數次, c 列被加了奇數次,那麼最終爲奇數的格子數是 r(m−c)+c(n−r),因此可以算出有哪些 (r,c) 滿足條件。
對於每對 (r,c),顯然可以分開計算行和列的方案數,最後再乘起來。
以行爲例,問題轉化爲用 1−n 填 Q 個位置,使得恰好有 r 個數的出現次數爲奇數。這個可以用生成函數做,答案即爲
(1!x+3!x3+5!x5+...)r(1+2!x2+4!x4+...)n−r(rn)Q! [xQ]
(2ex−e−x)r(2ex+e−x)n−r(rn)Q! [xQ]
(i=0∑re(2i−r)x(−1)r−i(ir))(j=0∑n−re(2j−n+r)x(jn−r))2n1(rn)Q! [xQ]
先枚舉 i+j :
(s=0∑ne(2s−n)xi=0∑s(−1)r−i(ir)(s−in−r))2n1(rn)Q! [xQ]
設 f(n,r,s)=∑i=0s(−1)r−i(ir)(s−in−r)
(s=0∑ne(2s−n)xf(n,r,s))2n1(rn)Q! [xQ]
(s=0∑ni=0∑∞i!(2s−n)ixif(n,r,s))2n1(rn)Q! [xQ]
(s=0∑n(2s−n)Qf(n,r,s))2n1(rn)
現在的問題就是對每個 n,r,如何快速求出 f(n,r,s) 對 s=0...n 的值。
因爲
f(n,r,s)=(x−1)r(x+1)n−r [xs]
可以先預處理出 (x−1)k,(x+1)k(k=0...n),然後對每個 (n,r) NTT 乘一遍得到 (x−1)r(x+1)n−r,於是就可以求出 f(n,r,s) 對 s=0...n 的值。
然後發現還是 T 了…
那麼不妨再進一步,預處理出 (x−1)k,(x+1)k(k=0..n) 對在做 NTT 時每個可能的 m=2i 的 NTT 後的多項式,這樣就可以在做每對 (n,r) 時少做 2 次 NTT 。
然後就卡過去了。
時間複雜度 O(n2log2n+Tn2logn) 。
代碼
Faulty System
挖坑