AGC035


Contest Page

A

唯一會做的題/kk

題目相當於要求相鄰三個的異或和為\(0\)

當我們放入了三個數\(a,b,c\)時,接下來的放入順序顯然一定是\(a,b,c,a,b,c,...\)。所以當數可以分成三份,每份大小\(\frac{n}{3}\)且其中的數全部相等,從三份中各取一個數的異或和為\(0\)時有解,否則無解。

B

當邊數為奇數的時候顯然無解

否則選出一棵生成樹,其他的邊亂選方向,樹上自底向上確定邊的方向,一條樹邊應當使得其兒子的出度變為偶數。因為邊數是偶數所以根也一定滿足條件。

C

\(n=2^k\)時顯然無解

否則考慮增量構造。注意到已經給出了\(n=3\)時的答案,我們從\(4\)開始,每一次兩兩在樹上用下圖的方式將點掛在樹上:

上面是一個\(n=5\)的情況,掛上的\(4,5,9,10\)點顯然是滿足條件的。與此同時權值為\(6,7\)\(8,9\)\(10,11\)...的點也可以這樣做。

對於最后剩下的一個權值也不難在樹上找到一條經過\(1\)和其他兩個節點的路徑的異或和為這個權值。

D

考慮時間倒流,也就是每一次兩個位置吐出一個新的位置出來。

記錄每一個位置的值自然不可取,我們可以考慮記錄每一個位置對答案的貢獻。最初兩個位置對答案的貢獻均是\(1\),接下來每一次吐出的一個位置的貢獻則是其旁邊兩個位置的貢獻之和。

接下來考慮DP:設\(f_{l,r,fl,fr}\)表示要確定區間\([l+1,r-1]\)的所有位置的貢獻,\(l\)的貢獻是\(fl\)\(r\)的貢獻是\(fr\)時的最小貢獻,轉移枚舉由\(l,r\)吐出來的位置的編號然后遞歸進入兩邊的DP過程。

因為每遞歸一層\((fl,fr)\)數量至多翻倍,所以總狀態數是\(O(2^nn^2)\)的,復雜度\(O(2^nn^3)\)

E

考慮某個集合是否合法。如果集合中同時存在\(x\)\(x-2\)則連邊\((x,x-2)\);同時存在\(x\)\(x+K\)則連邊\((x,x+K)\),那么有環顯然不合法,無環時選擇一個拓撲序進行刪除顯然合法。那么我們需要求的就是無環的集合數量。當\(2 \mid K\)時奇偶獨立,對於奇數和偶數都是不能選擇連續的\(\frac{K}{2}+1\)個數,這個可以簡單地解決。

\(2 \not\mid K\)時則不能存在\(a>b , a \not\equiv b (\ \bmod2)\)滿足\(a,a-2,...,b-K,b,b-2,...,a-K\)同時在集合內。兩者都是一段連續的區間,那么可以考慮從小到大將數加入到集合中。

\(f_{i,p,q,fp,fq}\)表示已經填入了\(1 \sim i\),當前填入的奇數段長度為\(p\)、偶數段長度為\(q\),奇數從現在開始一直填到\(fp\)就不合法,偶數從現在開始一直填到\(fq\)就不合法,滿足這些條件的集合數量。

不失一般性地考慮\(2 \not\mid i+1\)的轉移。首先可以選擇不填\(i+1\),因為限制需要一直填到\(fp\)才不合法,此時不填則限制全部消失,即

\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,0,q,N+1,fq} \]

如果填則必須要滿足\(fp > i+1\)。此時如果存在一個在偶數段內的數能夠通過\(K\)跳到\(i+1\),即\(i+2-2q+K \leq i+1\),則此時這個奇數段必須不能通過\(K\)跳到與當前偶數段相連的偶數位,即\(fq \leq i+1-2p+K\)。有轉移:

\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,p+1,q,fp,min(fq,i+1-2p+K)} \]

如果不存在這樣的位置,那么就不會有限制,即

\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,p+1,q,fp,fq} \]

注意到\(fp,fq\)只有\(p,q\)中較大的那一個可能不是\(N+1\),否則一定已經存在環,所以\((fp,fq)\)的數量是\(O(N)\)級別的。復雜度\(O(N^4)\),狀態常數很小可以map實現。

F

\(k_i = j-1,l_j=i\)時,可以讓\(k_i\)\(1\)\(l_j\)\(1\),得到一個等價的狀態。我們設無法進行這樣操作的狀態是標准狀態,考慮證明標准狀態與網格一一對應。一個標准狀態肯定對應一個網格,只需證明一個網格對應一個標准狀態。

假設有兩個不同標准狀態\((l,k)\)\((l',k')\)對應相同的網格,則\(l\)\(l'\)\(k\)\(k'\)必定不同。找到第一個位置\(x\)滿足\(l_x \neq l'_x\),不失一般性假設\(l_x < l'_x\),則:

如果\(x=1\),則顯然在兩個矩陣中\(A_{l'_x,1}=1\),所以\(k_{l'_x,1}=0\),則第二個狀態不是標准狀態;

如果\(x \neq 1\),則兩個矩陣中\(A_{l'_x , x} = 1\),必定有\(k_{l'_x} \geq x , k'_{l'_x} < x\),而因為\((k',l')\)是標准的,所以\(k'_{l'_x} \neq x-1\),所以兩個矩陣中的\(A_{l'_x , x-1}\)必定不同,與假設矛盾。

所以我們只需要算標准狀態的數量,考慮以下兩種做法:

1、DP:設\(f_{i,j}\)表示考慮了前\(i\)列、有\(j\)行滿足\(k_x \leq i\),轉移枚舉有多少行等於\(i-1\),則有

\[f_{i,j} = \sum\limits_{k \leq j} f_{i-1,k} \binom{j}{k} (N+1-(j-k)) \]

不難發現這是一個卷積的形式,可以多項式快速冪優化,但是因為出題人沒想到這種做法所以如果exp稍微慢一點就會被卡;

2、容斥:容斥有多少對\((x,y)\)滿足\(k_x=y-1,l_y=x\),其余隨意指定,則答案為

\[\sum\limits_{i=0}^{min(N,M)} (-1)^i \binom{N}{i} \binom{M}{i} i! (N+1)^{M-i} (M+1)^{N-i} \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM