标签:
【题目大意】
有5*6盏灯,每次开/关一个灯,上下左右的灯状态也会反转。问怎么使状态统一?
【思路】
典型高斯消元解XOR方程,注意每盏灯要么0次要么1次。
1 #include <iostream> 2 #include <stdio.h> 3 #include <algorithm> 4 #include <set> 5 using namespace std; 6 int a[40][40]; 7 void gauss() 8 { 9 int i,j,k; 10 for(i=0; i<30; i++) 11 { 12 for(k=i; k<30; k++) 13 if(a[k][i])break; 14 if(k!=i) 15 for(j=0; j<31; j++)swap(a[i][j],a[k][j]); 16 for(j=0; j<30; j++) 17 { 18 if(i!=j&&a[j][i]) 19 for(k=0; k<31; k++) 20 a[j][k]^=a[i][k]; 21 } 22 } 23 } 24 int main() 25 { 26 int n,i,cas=1; 27 cin>>n; 28 while(n--) 29 { 30 memset(a,0,sizeof(a)); 31 for(i=0; i<30; i++) 32 scanf("%d",&a[i][30]); 33 for(i=0; i<30; i++) 34 { 35 a[i][i]=1; 36 if(i>=6) 37 a[i][i-6]=1; 38 if(i<24) 39 a[i][i+6]=1; 40 if(i%6) 41 a[i][i-1]=1; 42 if((i+1)%6) 43 a[i][i+1]=1; 44 } 45 gauss(); 46 printf("PUZZLE #%d\n",cas++); 47 for(i=0; i<30; i++) 48 { 49 printf("%d",a[i][30]); 50 if((i+1)%6==0)printf("\n"); 51 else printf(" "); 52 } 53 } 54 }
标签:
原文地址:http://www.cnblogs.com/iiyiyi/p/5667369.html