poj 1830 開關問題(線性方程組,高斯消元)

2021-06-29 12:13:20 字數 960 閱讀 2529

題意:

n個開關,給出初態和終態。

還有一些關係對(i,j),表示切換第i個開關狀態後第j個開關狀態也會切換

求有多少種方法從初態到終態。

思路:

詳細題解傳送

方程怎麼列出來的參照上面的題解。。。

這裡因為我們用的是異或操作。所以在消元的時候也要通過異或來消。

但是,困擾我很久的是為什麼直接異或係數等式仍成立?

下面簡單地證明一下: x∗

(axo

rb)=

(x∗a

)xor

(x∗b

) 其中x是變數,a,b是常數

上面的等式,分別取x=0,x=1都很容易發現其成立。

所以把兩個異或不等式異或到一起後,再把上面的式子逆過來應用就ok了。

typedef

vector

vec;

typedef

vector

mat;

int gauss_jordan(const mat &a, const vec &b)

}int cnt = 0;

for (int i=0;iif (b[i][i] == 0)

}return

1<< cnt;

}int main()

rep(i, 0, n-1)

mat a(n, vec(n));

vec b(n);

rep(i, 0, n-1) b[i] = s[i]^t[i];

rep(i, 0, n-1) a[i][i] = 1;

while (cin >> x >> y && (x+y))

int ans = gauss_jordan(a, b);

if (ans == -1)

else

}return

0;}

POJ1830 開關問題

中文題目,就不說題目大意了 解題思路 由於對於每乙個開關最多改變一次,那麼對於每乙個開關,只有改變與不改變兩種操作,設改變操作為1,不改變操作為0,那麼對開關的操作可以用乙個n維向量x t x 1,x2 x n 其中xi 0或者 1 我們需要知道初始狀態經過某次操作之後的狀態,並拿它與目標狀態比較。...

開關問題 POJ 1830

題意 燈泡對應開關,有些開關的撥動會影響其他的開關,給出燈泡初始狀態,給出燈泡結束狀態,問有幾種操作可以完成 思路 建立矩陣,消元後有n個自由變元,答案就是2 n個 include include include includeusing namespace std const int maxn 5...

POJ 1830 開關問題

前述 今天又領略了被假模版坑的心痛,基本都在調 由於被問及相關poj 1222的異或方程組的相關問題,我總算是知道了昨天那個博主為什麼理解了兩天了.原來poj 1222的相關題解都是用矩陣講的異或方程組,講的賊煩,而我正好找了乙個類似卻又不存在的題目,用他的 a了這個poj 1222,渾然不知有這等...