zoukankan      html  css  js  c++  java
  • POJ1222熄灯问题

    千年老题,以前用枚举做,现在用高斯消元做

    自由元直接做成0即可

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 int a[55][55];
     7 int ans[6][7];
     8 int c(int x,int y){return (x*6+y+1);}
     9 int d[5]={0,-1,0,1,0};
    10 void gauss(int m,int n){
    11     int line=1;
    12     for(int k=1;k<=m;k++){
    13         int i=line;
    14         while(i<=m){if(a[i][k])break;i++;}
    15         if(i>m)continue;
    16         if(i!=line){swap(a[i],a[line]);}
    17         for(i=1;i<=m;i++){
    18             if(i!=line&&a[i][k]){
    19                 for(int j=k;j<=n;j++){
    20                     a[i][j]^=a[line][j];
    21                 }
    22             }
    23         }
    24         line++;
    25     }
    26 //    for(int i=1;i<=30;i++){
    27 //        for(int j=1;j<=30;j++){
    28 //            printf("%d ",a[i][j]);    
    29 //        }
    30 //        printf("
    ");
    31 //    }
    32     for(int i=0;i<5;i++){
    33         for(int j=0;j<6;j++){
    34             ans[i][j]=a[c(i,j)][n];
    35         }
    36     }
    37 }
    38 void solve(){
    39     memset(a,0,sizeof(a));
    40     memset(ans,0,sizeof(ans));
    41     int x;
    42     for(int i=0;i<5;i++){
    43         for(int j=0;j<6;j++){
    44             scanf("%d",&x);
    45             a[c(i,j)][31]=x;
    46             a[c(i,j)][c(i,j)]=1;
    47             for(int k=0;k<4;k++){
    48                 int x=i+d[k],y=j+d[k+1];
    49                 if(x>=0&&x<5&&y>=0&&y<6)a[c(i,j)][c(x,y)]=1;
    50             }
    51         }
    52     }
    53     gauss(30,31);
    54     for(int i=0;i<5;i++){
    55         for(int j=0;j<5;j++){
    56             printf("%d ",ans[i][j]);
    57         }
    58         printf("%d
    ",ans[i][5]);
    59     }
    60 }
    61 int main()
    62 {
    63 //    freopen("data.in","r",stdin); 
    64     int T;
    65     scanf("%d",&T);
    66     for(int i=1;i<=T;i++){
    67         printf("PUZZLE #%d
    ",i);
    68         solve();
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    fescar源码解析系列(一)之启动详解
    dubbo源码解析二 invoker链
    dubbo源码解析一
    CSP-S 2021 游记
    使用SpEL记录操作日志的详细信息
    Router 重定向和别名是什么?
    vue项目做seo(prerender-spa-plugin预渲染)
    vue3.0初体验有哪些实用新功能
    uniapp弹窗踩坑
    Spring boot application.properties 配置
  • 原文地址:https://www.cnblogs.com/w-h-h/p/8278184.html
Copyright © 2011-2022 走看看