題意:
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,渾然不知有這等...