POJ 1830 開關問題 高斯消元 異或方程組

2022-04-02 17:04:23 字數 788 閱讀 7594

題目鏈結

顯然我們需要使每個i滿足$$( ∑_ x[j]a[i][j] ) mod\ 2 = b[i]$$

求這個方程自由元xi的個數ans,那麼方案數便是\(2^\)

%2可以用^代替,不難看出 b[i]=st[i]^ed[i]

如果x[j]=1,假設j會影響i,那麼x[j]a[i][j]這一項應為1,所以a[i][j]應=1 輸入別反!

注意a[i][i]=1

將係數矩陣化為上三角形式後,剩下的係數全為0的行數就是自由元的個數;

如果某一行係數全為零,增廣矩陣最後一列對應行的值不為0,則無解

//硬是被輸入反了坑了半天。。

#include #include #include #include #define gc() getchar()

const int n=31;

inline int read()

struct gauss

if(mxrow!=r) std::swap(a[r],a[mxrow]);

for(int i=r+1; iif(a[i][c])

for(int j=c; j<=n; ++j)

a[i][j]^=a[r][j];

++r, ++c;

}//從r往後的行的矩陣元素都為0

for(int i=r; iif(a[i][n])

printf("%d\n",1<<(n-r));

}}g;

int main()

POJ 1830 開關問題 高斯消元

開關問題 time limit 1000ms memory limit 30000k total submissions 3390 accepted 1143 description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應...

poj 1830 開關問題 高斯消元

題意是 給一些開關的初始狀態 0 或1 在給出終止狀態,在給出相關的變化規則,規則 x 變化 則 y 也變 x y 讀入。輸出有多少種開關的撥動情況,使初始狀態變成終止狀態。此問題 很容易轉化成 高斯消元 解 異或方程組。t 方程組的自由化的個數,則結果就是 2 t include include ...

poj 1830 開關問題(高斯消元)

終止狀態是從初始狀態由開關組合影響而形成的,那麼就有乙個等式使得初始狀態可以到達終止狀態,例如a,b,c三個開關 e a xa mp a a xb mp a b xc map a c s a e b xa mp b a xb mp b b xc map b c s b e c xa mp c a x...