POJ1830 開關問題(高斯消元,異或方程組)

2022-02-27 17:02:07 字數 1084 閱讀 6552

題意:中文題面,求的是方案數。

首先可以知道, 如果方案數不止乙個的話,說明矩陣行列式值為0,即存在自由變元,由於變數只有兩種狀態,那麼方案數就是2^自由變元數。

從起始狀態到終止狀態,只需要關心起始和終止哪些狀態不一樣就行,也就是翻轉奇數次。

由於是倒推,所以開關的影響要反過來存。

1 #include 2

using

namespace

std;

34 typedef long

long

ll;5

const

int maxn = 33;6

int equ, var;7

inta[maxn][maxn];

8int

x[maxn];

9int

free_x[maxn];

10int

free_num;

1112

intgauss()

21if(a[max_r][col] == 0

) 26

if(max_r !=k)

30for(int i = k + 1; i < equ; i++) 35}

36}37}

38for(int i = k; i < equ; i++)

42if(k < var) return

var -k;

43for(int i = var - 1; i >= 0; i--) 48}

49return0;

50}5152

intmain()

67int

u, v;

68for(int i = 0; i < var; i++)

72while(~scanf("

%d%d

",&u,&v) && u+v)

75int ret =gauss();

76if(ret == -1

) puts(wtf);

77else printf("

%lld\n

", (ll)((ll)1

<79return0;

80 }

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...