POJ 開關問題 1830【高斯消元求矩陣的秩】
Language:
開關問題
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 Sample Input 2 3 0 0 0 1 1 1 1 2 1 3 2 1 2 3 3 1 3 2 0 0 3 0 0 0 1 0 1 1 2 2 1 0 0 Sample Output 4 Oh,it's impossible~!! Hint 第一組資料的說明:一共以下四種方法: 操作開關1 操作開關2 操作開關3 操作開關1、2、3 (不記順序) Source |
中文題~不翻譯。。
解題思路:主要是始末矩陣的處理方法。可以讓A+X=B 兩邊同時異或A就可以了。這樣就能簡單得到增廣矩陣。
a[i][j]是j燈控制i燈。記得把a[i][i]的情況加上,差點忽略這點,自己當然可以控制自己啊。
AC程式碼:
#include <stdio.h> #include <math.h> #include <vector> #include <queue> #include <string> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #define MAXN 31 using namespace std; int equ,var; int a[MAXN][MAXN]; int Gauss() { int col=0; int k,max_r; for(k=0;col<var&&k<equ;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(max_r!=k){ for(int i=col;i<=var;i++) swap(a[k][i],a[max_r][i]); } if(!a[k][col]){ k--; continue; } for(int i=k+1;i<equ;i++) if(a[i][col]) for(int j=col;j<=var;j++) a[i][j]^=a[k][j]; } for(int i=k;i<equ;i++) if(a[i][col]) return -1; return var-k; } int main() { int T; scanf("%d",&T); while(T--){ memset(a,0,sizeof(a)); scanf("%d",&equ); var=equ; int b; for(int i=0;i<equ;i++){ //a[i][i]=1; scanf("%d",&b); a[i][var]=b; } for(int i=0;i<equ;i++){ scanf("%d",&b); a[i][var]^=b; } int I,J; while(scanf("%d%d",&I,&J),I!=0||J!=0){ a[J-1][I-1]=1; } for(int i=0;i<equ;i++) a[i][i]=1; int res=Gauss(); if(res<0)printf("Oh,it's impossible~!!\n"); else printf("%d\n",1<<res); } return 0; }
相關推薦
POJ 開關問題 1830【高斯消元求矩陣的秩】
Language: 開關問題 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6656 Accepted: 2541
【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 高斯消元求矩陣的逆+匈牙利算法
def strong bzoj light sof turn 防止 宇宙 != 【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 Description 銀河隊選手名單出來了!小林,作為特聘的營養師,將負責銀河隊選手參加宇宙比賽的飲食。眾所周知,前往宇宙的某個
【高斯消元求期望】LightOJ
Step1 Problem: 有 100 個格子,從 1 開始走,每次拋骰子走 1~6,如果所走位置大於 100,則重新拋骰子。i 會被傳送至 nex[i]。 問你從 1 走到 100 所拋骰子的期望次數。 Step2 Ideas: 由期望公式可得:dp[
高斯消元求矩陣的逆
線性基 單位矩陣 線性 行列式 math pan class clas 同時 以前的博客:高斯消元,線性基,行列式。 考慮將\(A\)消成單位矩陣,同時對單位矩陣\(I\)做同樣的操作,這樣\(A\)變成\(I\),而\(I\)變成\(A^{-1}\)。 用高斯消元即可。
【BZOJ2844】albus就是要第一個出場 高斯消元求線性基
子集 高斯 efi continue clas sum ext ++ pre 【BZOJ2844】albus就是要第一個出場 Description 已知一個長度為n的正整數序列A(下標從1開始), 令 S = { x | 1 <= x <= n },
【BZOJ2460】[BeiJing2011]元素 貪心+高斯消元求線性基
%d 很好 jin 種類 namespace 隨著 clu rip ret 【BZOJ2460】[BeiJing2011]元素 Description 相傳,在遠古時期,位於西方大陸的 Magic Land 上,人們已經掌握了用魔法礦石煉制法杖的技術。那時人們就
【BZOJ2322】[BeiJing2011]夢想封印 高斯消元求線性基+DFS+set
思考 包含 cst 計算 next 裏的 是否 異或和 無法使用 【BZOJ2322】[BeiJing2011]夢想封印 Description 漸漸地,Magic Land上的人們對那座島嶼上的各種現象有了深入的了解。 為了分析一種奇特的稱為夢想封印(Fanta
POJ 2947-Widget Factory(高斯消元解同余方程式)
free popu == += 3-9 sca -m stack art 題目地址:id=2947">POJ 2947 題意:N種物品。M條記錄,接寫來M行,每行有K。Start,End,表述從星期Start到星期End,做了K件物品。接下來的K個數為物品的編號。
【枚舉】【高斯消元】Gym - 101412D - Find the Outlier
void while ... () fine blog 個數 i+1 find 給你一個未知的d次多項式在0,1,...,d+2處的取值,其中有且只有一個是錯的,問你哪個是錯的。 枚舉哪個是錯的,再在剩下的d+2個中取d+1個高斯消元,解出多項式系數,然後代一下最後剩下的那
【高斯消元】CDOJ1785 曜醬的線性代數課堂(三)
++i for cnblogs mes swa eps mem else 正在 高斯消元求行列式板子。 #include<cstdio> #include<cmath> #include<algorithm> #include
【高斯消元】CDOJ1783 曜醬的線性代數課堂(一)
turn abs swap size wap n) memset efi 高斯 高斯消元求逆矩陣板子。 #include<cstdio> #include<cmath> #include<algorithm> #include
【高斯消元】CDOJ1784 曜醬的線性代數課堂(二)
cst %d can cstring 課堂 esp 線性 memset () 高斯消元求矩陣秩板子。 #include<cstdio> #include<cmath> #include<algorithm> #include&
[poj1830]開關問題(高斯消元)
math main 問題 size class con ret str int 題意:求高斯消元中自由元的個數,輸出1<<ans; 1 #include<cstdio> 2 #include<cstdlib> 3 #inc
bzoj 2337 [HNOI2011]XOR和路徑【高斯消元+dp】
name 直接 ring size scanf 高斯消元 str pre hnoi 首先,我們發現,因為是無向圖,所以相連的點之間是有“依賴性”的,所以不能直接用dp求解。 因為是xor,所以按位處理,於是列線性方程組,設$ x[i] $為點i到n異或和為1的期望,因為從1
bzoj 3143 [Hnoi2013]遊走【高斯消元+dp】
sca source include hnoi2013 esp cst cpp std ans 參考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有點像 設點u的經過期望(還是概率啊我也分不清,以下都
【高斯消元】BZOJ3503 [Cqoi2014]和諧矩陣
math esp fine eps bzoj3503 mem 組成 time ios 3503: [Cqoi2014]和諧矩陣 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1197
bzoj 1923: [Sdoi2010]外星千足蟲【高斯消元】
ios eterm char max ear space \n term n+1 裸的異或高斯消元 #include<iostream> #include<cstdio> using namespace std; const int N=2005;
【高斯消元板子】
#include<stdio.h>///poj 2947當作板子可能更好一下 #include<algorithm> #include<iostream> #include<string.h> #include<math.h> usin
hdu5955 Guessing the Dice Roll【AC自動機】【高斯消元】【概率】【待補...】
inpu ont recommend match ble 北大 problem ng2 bottom 2016沈陽區域賽http://acm.hdu.edu.cn/showproblem.php?pid=5955 Guessing the Dice Roll Time Li
【字串】【高斯消元】【KMP】BZOJ4820硬幣遊戲
分析: 如果資料範圍再小點,可以利用BZOJ1444有趣的遊戲方法來做。 所以這裡為了優化,直接儲存下來從某個字串轉移到另一個的概率即可。 #include<cstdio> #include