poj 1830 開關問題

2021-08-25 05:57:43 字數 764 閱讀 7520

這道題是個十分有趣的數學題。有n個開關,這n個開關兩兩之間可能有著關係,如果有關係,按下這個開關,另乙個開關的狀態也會改變。先給你n個開關的初始狀態,再給你n個開關的最終狀態,然後告訴你開關之間的關係,問你能不能通過調整開關使達到最終狀態,如果能,求方案的數量。

我們用0,1分別表示開關的兩個不同狀態,對於每個開關,我們知道其他的n-1個開關與它的關係。這個開關是通過哪個狀態變成了最終狀態,這個設為未知量xi。那麼就有n個未知量,關於未知量的方程就需要用到我們之前儲存的關係來建立增廣矩陣。假如按了i,j也會隨著變化,那我們就把a【j】【i】的係數存為1,否則為0。第i個方程,存的a【i】【j】=1代表按j會改變i,每個方程的常數項是第i個開關的初始狀態與最終狀態的異或值。然後我們就得到了n個關於n個開關的方程組。異或運算其實就是不進製的加法運算,我們仍然用高斯消元解出增廣矩陣。消除完之後,剩下的自由元的數量為k,那麼ans=2^k。如果存在0=1這種情況,則無解。

#include#include#include#includeusing namespace std;

int n,t,ans,a[40];

int main()

if(a[i]==1)

for(int k=n;k;k--)

if((a[i]>>k)&1)

} if(ans==0) printf("oh,it's impossible~!!\n");

else printf("%d\n",ans);

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