Codechef October Challenge 2019 Division 1 solutions

Chef and Maximum Star Value

顯然如果一個數後面有它的因數,那麼它一定不可能是最大值。先從後往前枚舉一遍把這些數去掉,再從前往後做一遍,每個數枚舉它所有倍數統計即可。
因爲每個數最多隻會做一次,時間複雜度是 O(TAilogAi)O(TA_i\log A_i)

代碼

Array Modification

考慮每次遍歷對於每一對 (a,b)(a,b) 的影響:
(a,b)(a xor b,a)(b,a xor b)(a,b)(a,b)\rightarrow (a~xor~b, a)\rightarrow (b,a~xor~b)\rightarrow (a,b)
所以判下總共會有幾次完全遍歷 00n1n-1,再把剩下的做一次就可以了。
要特判 i=ni1i = n-i-1 的情況。
時間複雜度 O(TN)O(TN)

代碼

Even Edges

對於 k4k\geq4 的情況,如果某 22 組點間有偶數條邊,那麼顯然可以將它們合併。如果所有組之間都是奇數條邊,那麼任意選出 44 組合併成 11 組,這一組的邊數也是偶數。
因此 k3k\le 3
mm 爲偶數時顯然 kk 即爲 11
否則,若原圖中有一個點度數爲奇數,將它隔離後剩下的點的邊數即爲偶數,於是 k=2k=2
而若原圖中所有點度數都爲偶數,那麼無論怎麼隔離出一組點,其與剩下的點間的邊數一定是偶數,所以不可能 22 組點內部的邊數都爲偶數。此時 k=3k=3
至於 k=3k=3 時求出一個合法的答案,只需要找出一條邊 (u,v)(u,v)uuvv、剩下的點各成一組即可。

代碼

Bacterial Reproduction

對於非葉子節點 uu,它某個祖先 vvt0t_0 時刻的操作對它在 t1t_1產生影響的條件是 t1=t0+dudvt_1=t_0+d_u-d_v,即 t1du=t0dvt_1-d_u=t_0-d_v
如果 uu 是葉子節點,就變爲 t1dut0dvt_1-d_u\geq t_0-d_v
那麼離線之後遍歷一遍樹,記錄下這些值就好了。
時間複雜度 O(N+Q)O(N+Q)

代碼

Queries on Matrix

假設最終有 rr 行被加了奇數次, cc 列被加了奇數次,那麼最終爲奇數的格子數是 r(mc)+c(nr)r(m-c)+c(n-r),因此可以算出有哪些 (r,c)(r,c) 滿足條件。
對於每對 (r,c)(r,c),顯然可以分開計算行和列的方案數,最後再乘起來。
以行爲例,問題轉化爲用 1n1-nQQ 個位置,使得恰好有 rr 個數的出現次數爲奇數。這個可以用生成函數做,答案即爲
(x1!+x33!+x55!+...)r(1+x22!+x44!+...)nr(nr)Q! [xQ]({x\over 1!}+{x^3\over 3!}+{x^5\over 5!}+...)^r(1+{x^2\over 2!}+{x^4\over 4!}+...)^{n-r}{n\choose r}Q!~[x^Q]
(exex2)r(ex+ex2)nr(nr)Q! [xQ]({e^x-e^{-x}\over 2 })^r({e^x+e^{-x}\over 2 })^{n-r}{n\choose r}Q!~[x^Q]
(i=0re(2ir)x(1)ri(ri))(j=0nre(2jn+r)x(nrj))12n(nr)Q! [xQ](\sum_{i=0}^re^{(2i-r)x}{(-1)^{r-i}}{r\choose i})(\sum_{j=0}^{n-r}e^{(2j-n+r)x}{n-r\choose j}){1\over {2^n}}{n\choose r}Q!~[x^Q]
先枚舉 i+ji+j :
(s=0ne(2sn)xi=0s(1)ri(ri)(nrsi))12n(nr)Q! [xQ](\sum_{s=0}^ne^{(2s-n)x}\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i}){1\over {2^n}}{n\choose r}Q!~[x^Q]
f(n,r,s)=i=0s(1)ri(ri)(nrsi)f(n,r,s)=\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i}
(s=0ne(2sn)xf(n,r,s))12n(nr)Q! [xQ](\sum_{s=0}^ne^{(2s-n)x}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q]
(s=0ni=0(2sn)ixii!f(n,r,s))12n(nr)Q! [xQ](\sum_{s=0}^n\sum_{i=0}^{\infin} {(2s-n)^ix^i\over i!}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q]
(s=0n(2sn)Qf(n,r,s))12n(nr)(\sum_{s=0}^n(2s-n)^Qf(n,r,s)){1\over {2^n}}{n\choose r}
現在的問題就是對每個 n,rn,r,如何快速求出 f(n,r,s)f(n,r,s)s=0...ns=0...n 的值。
因爲
f(n,r,s)=(x1)r(x+1)nr [xs]f(n,r,s)=(x-1)^r(x+1)^{n-r}~[x^s]
可以先預處理出 (x1)k,(x+1)k(k=0...n)(x-1)^k,(x+1)^k(k=0...n),然後對每個 (n,r)(n,r) NTT 乘一遍得到 (x1)r(x+1)nr(x-1)^r(x+1)^{n-r},於是就可以求出 f(n,r,s)f(n,r,s)s=0...ns=0...n 的值。
然後發現還是 T 了…
那麼不妨再進一步,預處理出 (x1)k,(x+1)k(k=0..n)(x-1)^k,(x+1)^k(k=0..n) 對在做 NTT 時每個可能的 m=2im=2^i 的 NTT 後的多項式,這樣就可以在做每對 (n,r)(n,r) 時少做 22 次 NTT 。
然後就卡過去了。
時間複雜度 O(n2log2n+Tn2logn)O(n^2\log^2 n+Tn^2\log n)

代碼

Faulty System

挖坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章