poj1830開關問題 異或高斯消元

2022-05-12 12:41:29 字數 829 閱讀 1282

題目:

根據題意,構造出n元方程組:

a(1,1)x1 ^ a(1,2)x2 ^ a(1,3)x3 ... a(1,n)xn = st1 ^ ed1

a(2,1)x1 ...... = st2 ^ ed2

其中a(x,y)表示x是否受到y影響;x為各燈是否操作;stx為x初始狀態,edx為x目標狀態;

把乙個方程壓縮成乙個整數,第1位表示等號右邊,之後各位表示方程各項;

進行異或運算的高斯消元,要消元時只需異或一下即可;

自由元的存在使其方案數增多,每個自由元使答案*2(可以選擇操作或不操作)。

**如下:

#include#include

#include

using

namespace

std;

int t,n,a[35

],ans;

void

gauss()

if(a[i]==1)//

係數0,常數1

//消去其他式中a[i]最高位1

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

if(a[i]&(1

<}

}int

main()

intx,y;

while(~scanf("

%d%d

",&x,&y))

gauss();

if(!ans)printf("

oh,it's impossible~!!\n");

else printf("

%d\n

",ans);

}return0;

}

POJ1830 開關問題 高斯消元 異或

設xixi表示第ii個開關的操作情況,那麼xi 1xi 1為按了這個開關,否則xi 0xi 0表示這個開關並沒有按下去,那麼我們接著統計ai,jai,j表示第i個開關和第j個開關的聯絡情況,ai,j 1ai,j 1表示按下j會影響i的狀態,否則就是不會影響,即ai,j 0ai,j 0,特殊地乙個點就...

poj1830 開關問題 高斯消元求解異或方程組

第一道高斯消元題目 題目 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過若干次開關操作後使得最後n個開關達到乙個特定的狀態。對於任意乙個開關...

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