• [SDOI2010]外星千足虫(高斯消元)


    高斯消元裸题。。。

    方法一:暴力,O(2^n)20分

    方法二:直接Gauss,加点玄学技巧搞得好的话70分

    方法三:使用bitset优化,复杂度:$O(frac{n^3}{ω})$

    不会的同学看一下代码吧,跟裸Gauss差不多...只不过消元地方用异或消

    真的是代码一看就懂了呢...

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<bitset>
     5 #define writeln(x)  write(x),puts("")
     6 #define writep(x)   write(x),putchar(' ')
     7 using namespace std;
     8 inline int read(){
     9     int ans=0,f=1;char chr=getchar();
    10     while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
    11     while(isdigit(chr)){ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
    12     return ans*f;
    13 }void write(int x){
    14     if(x<0) putchar('-'),x=-x;
    15     if(x>9) write(x/10);
    16     putchar(x%10+'0');
    17 }const int M=2005;
    18 bitset<M> a[M];
    19 int n,m,ans;
    20 inline void Gauss(){
    21     for(int i=1,now;i<=n;i++){now=i;
    22         while(!a[now][i]&&now<=m) ++now;
    23         if(now==m+1){return (void)(puts("Cannot Determine"));}
    24         ans=max(ans,now);
    25         if(now!=i) swap(a[now],a[i]);
    26         for(int j=1;j<=m;j++)
    27             if(i==j||!a[j][i]) continue;
    28             else a[j]^=a[i];
    29     }writeln(ans);
    30     for(int i=1;i<=n;i++){
    31         if(!a[i][n+1]) puts("Earth");
    32         else puts("?y7M#");
    33     }
    34 }
    35 int main(){
    36     n=read(),m=read();
    37     for(int i=1;i<=m;i++)
    38         for(int j=1;j<=n+1;j++){
    39             char chr;
    40             while((chr=getchar())<'0'||chr>'1');
    41             a[i][j]=chr-48;
    42         }Gauss();
    43     return 0;
    44 }
  • 相关阅读:
    Hyper-V自定义专用网络网段
    mongodb导入,导出实例
    kafka介绍二 快速开始
    常用代理IP服务商
    kafka介绍一
    链接汇总
    心态,决定你的人生
    hibernate入门(三)hibernate的三种状态解析
    hibernate入门(二)一级缓存和三种状态解析
    css动画之颤动的动画
  • 原文地址:https://www.cnblogs.com/zhenglw/p/10912883.html
Copyright © 2020-2023  润新知