POJ 1830 開關問題,poj1830開關問題

來源:互聯網
上載者:User

POJ 1830 開關問題,poj1830開關問題


簡單的高斯消元模數,答案為2^自由變元的數量,但是題目的意思把I,J搞反了,坑爹。。。


開關問題
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 5425   Accepted: 2023

Description

有N個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過若干次開關操作後使得最後N個開關達到一個特定的狀態。對於任意一個開關,最多隻能進行一次開關操作。你的任務是,計算有多少種可以達到指定狀態的方法。(不計開關操作的順序)

Input

輸入第一行有一個數K,表示以下有K組測試資料。 
每組測試資料的格式如下: 
第一行 一個數N(0 < N < 29) 
第二行 N個0或者1的數,表示開始時N個開關狀態。 
第三行 N個0或者1的數,表示操作結束後N個開關的狀態。 
接下來 每行兩個數I J,表示如果操作第 I 個開關,第J個開關的狀態也會變化。每組資料以 0 0 結束。 

Output

如果有可行方法,輸出總數,否則輸出“Oh,it's impossible~!!” 不包括引號

Sample Input

230 0 01 1 11 21 32 12 33 13 20 030 0 01 0 11 22 10 0

Sample Output

4Oh,it's impossible~!!

Hint

第一組資料的說明: 
一共以下四種方法: 
操作開關1 
操作開關2 
操作開關3 
操作開關1、2、3 (不記順序) 

Source

LIANGLIANG@POJ

[Submit]   [Go Back]   [Status]   [Discuss]



#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn=50;int equ,var;int a[maxn][maxn],x[maxn];int free_x[maxn],free_num;int Gauss(){int max_r,col,k;free_num=0;for(k=0,col=0;k<equ&&col<var;k++,col++){max_r=k;for(int i=k+1;i<equ;i++){if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;}if(a[max_r][col]==0){k--;free_x[free_num++]=col;continue;}if(max_r!=k){for(int j=col;j<var+1;j++)swap(a[k][j],a[max_r][j]);}for(int i=k+1;i<equ;i++){if(a[i][col]!=0){for(int j=col;j<var+1;j++)a[i][j]^=a[k][j];}}}for(int i=k;i<equ;i++)if(a[i][col]!=0)return -1;if(k<var) return var-k;for(int i=var-1;i>=0;i--){x[i]=a[i][var];for(int j=i+1;j<var;j++)x[i]^=(a[i][j]&&x[j]);}return 0;}int begin[40],end[40],n;int main(){int T_T;scanf("%d",&T_T);while(T_T--){memset(a,0,sizeof(a));memset(x,0,sizeof(x));scanf("%d",&n);equ=var=n;for(int i=0;i<n;i++)scanf("%d",begin+i);for(int i=0;i<n;i++)scanf("%d",end+i);for(int i=0;i<n;i++)a[i][n]=begin[i]^end[i],a[i][i]=1;int n1,n2;while(scanf("%d%d",&n1,&n2)!=EOF){if(n1==0&&n2==0) break;n1--; n2--;a[n2][n1]=1;}int t=Gauss();if(t==-1){puts("Oh,it's impossible~!!");continue;}printf("%d\n",1<<t);}return 0;}




我想學C++與逆向工程

逆向工程、高手不是都自己做工具的,而是手頭有好工具。有些工具你再牛叉也做不出來,不是說你沒能力,而是人的精力畢竟有限,善用別人的成果達到自己的目的,那才是牛。
 
小學生聽寫格式 怎空格

把聽寫的紙輕輕折兩折,變成 一頁四個空,一本正常大小的聽寫本小學生用來聽寫的話,我想空位是足夠了~
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.