1. 程式人生 > 其它 >【題解】CF1336E1 / CF1336E2 Chiori and Doll Picking

【題解】CF1336E1 / CF1336E2 Chiori and Doll Picking

easy version 將所有數插入線性基,注意到線性基有個結論: > 結論 1:令線性基的非 $0$ 位數為 $k$,那麼可以異或得到 $2^{k}$ 個數,且每個數出現次數恰好為 $2^{n-k}$ 。 接下來就是想辦法線上性基上做,討論一下線性基結構的優越性:有值的位置有 $k$ 個,為 $\{b_1,b_2,\cdots,b_{k}\}$,那麼最後結果的第 $b_{k}$ 位的取值只和是

easy version

將所有數插入線性基,注意到線性基有個結論:

結論 1:令線性基的非 \(0\) 位數為 \(k\),那麼可以異或得到 \(2^{k}\) 個數,且每個數出現次數恰好為 \(2^{n-k}\)

接下來就是想辦法線上性基上做,討論一下線性基結構的優越性:有值的位置有 \(k\)

個,為 \(\{b_1,b_2,\cdots,b_{k}\}\),那麼最後結果的第 \(b_{k}\) 位的取值只和是否選擇 \(b_k\) 有關。那麼當 \(k\leq \frac{m}{2}\) 時列舉選數集合,當 \(k\geq \frac{m}{2}\) 時狀壓 dp 即可。

hard version

hard version 就幹不過去了,\(k\) 較小時仍然可以暴搜,\(k\) 較大時複雜度看起來不太優。接下來討論一個 \(2^{m-k}\) 的做法用於替換原來的狀壓 dp 部分。

令線性基內元素集合為 \(S\),首先考慮構造 \(F(x)=\sum\limits_{i\leq\mathrm{span}(S)}x^i,G_c(x)=\sum\limits_{i}[\mathrm{popcount}(i)=c]x^i\)

,可以發現 \(ans_c\) 即為 \([x^0]F(x)G_c(x)\),這裡是異或卷積。然後觀察一下 \(\mathrm{FWT}(F(x))\) 有什麼特點:

結論 1\([x^i]\mathrm{FWT}(F(x))\) 只能是 \(0\)\(2^k\)

證明:因為有 \(\forall i\in \mathrm{span(S)},[x^i]F^2(x)=2^k\),即 \(F^2(x)=2^kF(x)\),也就是說 \(([x^i]\mathrm{FWT}(F(x)))^2=2^k[x^i]\mathrm{FWT}(F(x))\),那麼 \([x^i]\mathrm{FWT}(F(x))\)

只能取 \(0\) 或者 \(2^k\)

同樣可以得到:

結論 2\([x^i]\mathrm{FWT}(F(x))=2^k\) 的充要條件為 \(\forall j\in \mathrm{span}(S),2|\mathrm{popcount}(i\land j)\)

證明:考慮異或 fwt 的本質。因為 \(F(x)\) 有值的地方只有 \(2^k\) 個,所以那個 \((-1)^{\mathrm{popcount}(i\land j)}\) 一定始終取 \(1\),不然總和一定到不了 \(2^k\)

接著考慮這些位置的特點:

結論 3:滿足 \([x^i]\mathrm{FWT}(F(x))=2^k\) 的位置 \(i\) 是一個線性基 \(S'\) 的張成。

證明:對於兩個滿足要求的位置 \(i,j\) 以及 \(k\in \mathrm{span}(S)\),因為始終滿足 \(2|\mathrm{popcount}(i\land k)\)\(2|\mathrm{popcount}(j\land k)\),同時 \(i\oplus j\) 其實就是兩者相加減去兩遍重合的位置,所以有 \(2|\mathrm{popcount}((i\oplus j)\land k)\),也就是說 \((i\oplus j)\) 也滿足要求。

至此如果能將 \(S'\) 構造出來那麼大概率就能做。那這個線性基 \(S'\) 怎麼構造?現在的要求大概是:構造儘可能大的 \(S'\),滿足 \(\forall i\in S,j\in S',2|\mathrm{popcount}(i\land j)\)

注意到 \(\mathrm{FWT}(F(x))\) 各個位置上的數的總和為 \(2^m\)(只有 \(0\) 會對這個值造成可能不為 \(0\) 的貢獻,可以發現其他數造成的貢獻均為 \(0\),而位置數為 \(2^m\)),那麼對應地 \(|\mathrm{span}(S')|\) 應該為 \(2^{m-k}\),也就是說 \(|S'|=m-k\),這裡給出一個構造方案:

\(S\) 中所有沒有值的位置拿出來,然後將包含這個位置的有值的位置下標拿出來,組成的數丟入到 \(S'\) 中。可以發現這樣一定合法,同時 \(|S'|=m-k\)

接下來要考慮 \(\mathrm{FWT}(G_c(x))\) 的形式,考慮列舉 \(\mathrm{popcount}{(i\land j)}\) 的值 \(k\) 得到:\([x^i]\mathrm{FWT}(G_c(x))=\sum\limits_{k\geq 0}(-1)^{k}{\mathrm{popcount}(i)\choose k}{m-\mathrm{popcount}(i)\choose c-k}\),對不同的 \(\mathrm{popcount}(i)\) 分別處理貢獻式即可。

最後的答案為 \([x^0]\mathrm{IFWT}\left(\sum\limits_{i}\left([x^i]\mathrm{FWT}(F(x))\right)\left([x^i]\mathrm{FWT}(G_c(x))\right)\right)\),也就是 \(\frac{1}{2^m}\left(\sum\limits_{i}\left([x^i]\mathrm{FWT}(F(x))\right)\left([x^i]\mathrm{FWT}(G_c(x))\right)\right)\),後面的東西因為滿足 \([x^i]\mathrm{FWT}(F(x))> 0\)\(i\) 只有 \(2^{m-k}\) 個,而且只關心 \(\mathrm{popcount}(i)\),所以搜出來剩下的暴算就行,複雜度是 \(O(2^\frac{m}{2}+m^3)\) 的。

程式碼:Submission #130267420 - Codeforces