码迷,mamicode.com
首页 > 其他好文 > 详细

【高斯消元解XOR方程】POJ1222-EXTENDED

时间:2016-07-13 20:00:54      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

【题目大意】

有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 }

 

【高斯消元解XOR方程】POJ1222-EXTENDED

标签:

原文地址:http://www.cnblogs.com/iiyiyi/p/5667369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!