zoukankan      html  css  js  c++  java
  • POJ1222 EXTENDED LIGHTS OUT 高斯消元 XOR方程组

    http://poj.org/problem?id=1222

    在学校oj用搜索写了一次,这次写高斯消元,haoi现场裸xor方程消元没写出来,真实zz。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<map>
     7 using namespace std;
     8 #define LL long long
     9 int a[35]={};
    10 int x[35][35]={};
    11 int id[35]={};
    12 int main(){
    13     int T;scanf("%d",&T);
    14     for(int k=1;k<=T;++k){
    15         int y;memset(x,0,sizeof(x));memset(id,0,sizeof(id));
    16         for(int i=1;i<=30;i++){
    17             scanf("%d",&a[i]);y=i%6;if(y==0)y=6;
    18             x[i][0]=a[i]; x[i][i]=1;
    19             if(i-6>0)x[i][i-6]=1;
    20             if(y>1)x[i][i-1]=1;
    21             if(i+6<=30)x[i][i+6]=1;
    22             if(y<6)x[i][i+1]=1;
    23         }
    24         for(int i=1;i<30;i++){
    25             if(!x[i][i]){
    26                 for(int j=i+1;j<=30;j++){
    27                     if(x[j][i]){
    28                         for(int w=i;w<=30;w++){
    29                             swap(x[j][w],x[i][w]);
    30                         }swap(x[j][0],x[i][0]);
    31                         break;
    32                     }
    33                 }
    34             }
    35             if(!x[i][i])continue;
    36             for(int j=i+1;j<=30;j++){
    37                 if(!x[j][i])continue;
    38                 for(int w=i;w<=30;w++){
    39                     x[j][w]^=x[i][w];
    40                 }x[j][0]^=x[i][0];
    41             }
    42         }
    43         for(int i=30;i>=1;i--){
    44             int z=0;
    45             for(int j=30;j>i;j--)z^=(x[i][j]*id[j]);
    46             if(x[i][i]==0)id[i]=0;
    47             else{
    48                 if(z==x[i][0]){
    49                     id[i]=0;
    50                 }
    51                 else{
    52                     id[i]=1;
    53                 }
    54             }
    55         }
    56         printf("PUZZLE #%d
    ",k);
    57         for(int i=1;i<=5;i++){
    58             for(int j=1;j<=6;j++){
    59                 printf("%d ",id[(i-1)*6+j]);
    60             }printf("
    ");
    61         }
    62     }
    63     return 0;
    64 }
    View Code

  • 相关阅读:
    Spring----MyBatis整合
    VueRouter案列
    Vue-Router
    axios用法
    Fetch的使用
    Promise用法
    组件之间传值
    局部组件注册方式
    学习组件与模板
    如何实现new,call,apply,bind的底层原理。
  • 原文地址:https://www.cnblogs.com/137shoebills/p/9009022.html
Copyright © 2011-2022 走看看