題目:
根據題意,構造出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 ...