POJ 1222 EXTENDED LIGHTS OUT

来源:互联网 发布:英雄联盟网络连接 编辑:程序博客网 时间:2024/05/17 07:11
#include<iostream>#include<vector>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;#define MM(name,what) memset(name,what,sizeof(name))const int maxn = 30;const int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};int a[maxn][maxn];int b[maxn];int x[maxn];bool yes(int x,int y){if(x>=0 && x<5 && y>=0 && y<6){return true;}return false;}int get(int x,int y){return x*6+y;}bool find(int u,int line){for(int k=line;k<30;k++){if(a[k][u]==1){for(int i=u;i<30;i++){swap(a[line][i],a[k][i]);}swap(b[line],b[k]);return true;}}return false;}bool start(){int line = 0;for(int u=0;u<30;u++){if(!find(u,line)){continue;}for(int k=line+1;k<30;k++){if(a[k][u]){for(int i=u;i<30;i++){a[k][i]^=a[line][i];}b[k]^=b[line];}}line++;}if(line==30){for(int u=29;u>=0;u--){x[u]=b[u];for(int i=u+1;i<30;i++){x[u]^=a[u][i]*x[i];}}return true;}return false;}int main(){int T;cin>>T;for(int tt=1;tt<=T;tt++){MM(a,0);for(int i=0;i<maxn;i++){cin>>b[i];}int now,to;for(int i=0;i<5;i++){for(int j=0;j<6;j++){int now = get(i,j);a[now][now]=1;for(int u=0;u<4;u++){int tox = i+dir[u][0];int toy = j+dir[u][1];to = get(tox,toy);if(yes(tox,toy)){a[now][to]=1;}}}}if(start()){cout<<"PUZZLE #"<<tt<<endl;for(int i=0;i<5;i++){for(int j=0;j<5;j++){cout<<x[get(i,j)]<<" "; }cout<<x[get(i,5)]<<endl;}}}return 0;}

原创粉丝点击