【題解】CF1336E1 / CF1336E2 Chiori and Doll Picking
easy version
將所有數插入線性基,注意到線性基有個結論:
結論 1:令線性基的非 \(0\) 位數為 \(k\),那麼可以異或得到 \(2^{k}\) 個數,且每個數出現次數恰好為 \(2^{n-k}\) 。
接下來就是想辦法線上性基上做,討論一下線性基結構的優越性:有值的位置有 \(k\)
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\)
結論 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)\) 的。