zoukankan      html  css  js  c++  java
  • [poj1222]EXTENDED LIGHTS OUT(高斯消元)

    题意:每个灯开启会使自身和周围的灯反转,要使全图的灯灭掉,判断灯开的位置。

    解题关键:二进制高斯消元模板题。

    复杂度:$O({n^3})$

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<algorithm>
     7 using namespace std;
     8 const int N=35;
     9 int a[N][N],ans[N];
    10 int dx[5]={0,1,0,-1,0};
    11 int dy[5]={0,0,1,0,-1};
    12 int idx(int x,int y){return (x-1)*6+y;}
    13 void gauss(int nn){
    14     int i,j,k,l;
    15     for(i=1,j=1;i<=nn&&j<=nn;j++){
    16         for(k=i;k<=nn;k++)if(a[k][j])break;
    17         if(a[k][j]){
    18             for(l=1;l<=nn+1;l++) swap(a[i][l],a[k][l]);
    19             for(l=1;l<=nn;l++){
    20                 if(l!=i&&a[l][j])
    21                     for(k=1;k<=nn+1;k++) 
    22                         a[l][k]^=a[i][k];
    23             }
    24             i++;
    25         }
    26     }
    27     for(j=1;j<i;j++) ans[j]=a[j][nn+1];
    28 }
    29 
    30 int main(){
    31     int T,n=5,m=6,nn=n*m;
    32     scanf("%d",&T);
    33     for(int ca=1;ca<=T;ca++){
    34         memset(a,0,sizeof a);
    35         for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[idx(i,j)][nn+1]);
    36         for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<=4;k++){
    37             int x=i+dx[k],y=j+dy[k];
    38             if(x>n||y>m||x<1||y<1) continue;
    39             a[idx(i,j)][idx(x,y)]=1;
    40         }
    41         gauss(nn);
    42         printf("PUZZLE #%d
    ",ca);
    43         for(int i=1;i<=30;i++)printf("%d%c",ans[i],i%6==0?'
    ':' ');
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    Hadoop使用实例
    hdfs操作命令
    Hadoop安装与HDFS体系结构
    Linux和MySQL的安装与基本操作
    Hadoop演进与Hadoop生态
    作业一
    Shader笔记——9.简单灰色效果+遮罩
    iOS——xcodeproj脚本
    iOS——KSAdSDK
    UnityPlugins——4.SignInWithApple
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7674157.html
Copyright © 2011-2022 走看看