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++與逆向工程
逆向工程、高手不是都自己做工具的,而是手頭有好工具。有些工具你再牛叉也做不出來,不是說你沒能力,而是人的精力畢竟有限,善用別人的成果達到自己的目的,那才是牛。
小學生聽寫格式 怎空格
把聽寫的紙輕輕折兩折,變成 一頁四個空,一本正常大小的聽寫本小學生用來聽寫的話,我想空位是足夠了~