CF662C Binary Table(FWT_XOR卷积)
problem
洛谷鏈接
solution
第二次做的時候發現自己還是不會。發現自己沒有寫過題解,看來當時是沒有完全搞懂的。
nnn 與 mmm 的量級相差很大,nnn 的范圍是完全可以狀壓的。
不妨考慮枚舉最后翻轉了哪些行,將操作狀壓為一個數 XXX。
顯然對于同樣的 XXX 其最優答案是唯一的。
記,第 iii 列操作狀態為 C(i)C(i)C(i)。
每一列都是相互獨立的,所以貪心的可以在一開始就將這一列預先翻轉到最少的 111。
記,列狀態為 iii 時,經過翻轉最終的最少有 B(i)B(i)B(i) 個 111。
對于該列而言,最后的列狀態是列操作和行操作的疊加,即 X?C(i)X\bigoplus C(i)X?C(i) 。
因此最后的 111 的個數統計方法就是枚舉每一列然后記錄,∑i=1mB(X?C(i))\sum_{i=1}^mB(X\bigoplus C(i))∑i=1m?B(X?C(i))
考慮枚舉最后列的狀態,∑i=1m∑j=02n?1[X?C(i)=j]B(j)\sum_{i=1}^m\sum_{j=0}^{2^n-1}[X\bigoplus C(i)=j]B(j)∑i=1m?∑j=02n?1?[X?C(i)=j]B(j)。
記,所有列中有 A(i)A(i)A(i) 列的狀態為 iii。
則 ∑i=02n?1∑j=02n?1[X?i=j]B(j)?A(i)\sum_{i=0}^{2^n-1}\sum_{j=0}^{2^n-1}[X\bigoplus i=j]B(j)·A(i)∑i=02n?1?∑j=02n?1?[X?i=j]B(j)?A(i)。
X?i=j?X=i?j?∑i=02n?1∑j=02n?1[i?j=X]A(i)?B(j)?ans[X]=∑i?j=XA(i)B(j)X\bigoplus i=j\Rightarrow X=i\bigoplus j\Rightarrow \sum_{i=0}^{2^n-1}\sum_{j=0}^{2^n-1}[i\bigoplus j=X]A(i)·B(j)\Rightarrow ans[X]=\sum_{i\bigoplus j=X}A(i)B(j)X?i=j?X=i?j?∑i=02n?1?∑j=02n?1?[i?j=X]A(i)?B(j)?ans[X]=∑i?j=X?A(i)B(j)。
其實最后的答案就是 A,BA,BA,B 的卷積。
code
#include <bits/stdc++.h> using namespace std; #define int long long char s[25][100005]; int A[1 << 21], B[1 << 21]; int n, m, N;void fwt( int *c, int f ) {for( int i = 1;i < N;i <<= 1 )for( int j = 0;j < N;j += ( i << 1 ) )for( int k = 0;k < i;k ++ ) {int x = c[j + k], y = c[j + k + i];c[j + k] = x + y;c[j + k + i] = x - y;if( f == -1 ) c[j + k] /= 2, c[j + k + i] /= 2;} }signed main() {scanf( "%lld %lld", &n, &m );N = 1 << n;for( int i = 1;i <= n;i ++ ) scanf( "%s", s[i] + 1 );for( int j = 1;j <= m;j ++ ) {int k = 0;for( int i = 1;i <= n;i ++ ) k = k << 1 | (s[i][j] ^ 48);A[k] ++;}for( int i = 0;i < N;i ++ ) {int k = __builtin_popcount( i );B[i] = min( k, n - k );}fwt( A, 1 );fwt( B, 1 );for( int i = 0;i < N;i ++ ) A[i] = A[i] * B[i];fwt( A, -1 );int ans = 0x3f3f3f3f;for( int i = 0;i < N;i ++ ) ans = min( ans, A[i] );printf( "%lld\n", ans );return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的CF662C Binary Table(FWT_XOR卷积)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps怎么添加图标(ps怎么添加图标log
- 下一篇: [WC2018]州区划分(FWT_OR卷