poj 1830 異或方程組

2021-08-26 22:35:38 字數 713 閱讀 9253

【題意】

有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過若干次開關操作後使得最後n個開關達到乙個特定的狀態。對於任意乙個開關,最多只能進行一次開關操作。你的任務是,計算有多少種可以達到指定狀態的方法。(不計開關操作的順序)

【題解】

此題就是要求有多少個解。

對於每個開關,建立乙個方程,每個開關使用過與否為未知數。

高斯消元即可

【教訓】

重要的是,每乙個方程必須和自己關聯

【**】

#include #include #include #include using namespace std;

int a[31],st[31],ed[31];

int m,n;

inline int get(int i,int j)

int gauss() //for xor faster

for (i=row+1;i<=m;i++)

}for (i=row;i<=m;i++)

if (get(i,col)) return 0;

return 1<<(n-row+1);

}int main()

for (i=1;i<=n;i++)

{a[i]^=(st[i]^ed[i])<

POJ1830 開關問題(異或方程組)

本作品採用知識共享署名 相同方式共享 4.0 國際許可協議進行許可。有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過若干次開關操作後使得最後n...

POJ1830 異或方程組的高斯消元

對於式子 a b b b 即a對b進行連續異或時,可以發現有如下規律 若b為1,式子的值會在每次異或之後取反,因為0 1 1,1 1 0,若b為0,式子的值會保持a值不變,因為0 0 0,1 0 1,因而這種性質可以利用在poj1830這樣的有關聯的開關問題上 每個開關只能改變一次 假設開關1和開關...

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

自由元有兩種取值而且相互不影響,乘法定理可得 include include include using namespace std define for i,j,k for i j i k i define rep i,j,k for i j iconst int dx const int dy ...