2 条题解

  • 0
    @ 2025-10-8 17:05:01
    #include <bits/stdc++.h>
    using namespace std;
    const int N=1100;
    int n,m,a[N<<1][N],x[N];
    bool gauss()
    {
        int r=1,cur=0;
        for(int c=1;c<=n;c++)
        {
            if(a[r][c])cur=max(cur,r);
            for(int i=r+1;i<=m;i++)
            {
                while(a[i][c])
                {
                    if(a[r][c]==0) cur=max(cur,i);
                    for(int j=1;j<=n+1;j++)a[r][j]=a[r][j]^a[i][j];
                    swap(a[r],a[i]);
                }
            }
            if(a[r][c]!=0)r++;
        }
        if(r<=n) return 0;
        printf("%d\n",cur);
        for(int i=n;i>=1;i--)
        {
            for(int j=i+1;j<=n;j++) a[i][n+1]^=(x[j]*a[i][j]);
            x[i]=a[i][n+1];
        }
        for(int i=1;i<=n;i++)if(x[i]==0)printf("Earth\n");else printf("?y7M#\n");
        return 1;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        bool flag=0;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++ )scanf("%1d",&a[i][j]); 
            scanf("%d",&a[i][n+1]);
        }
        if(!gauss())printf("Cannot Determine\n");
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:04:52
      #include <bits/stdc++.h>
      using namespace std;
      const int N=1100;
      int n,m,a[N<<1][N],x[N];
      bool gauss()
      {
          int r=1,cur=0;
          for(int c=1;c<=n;c++)
          {
          	if(a[r][c])cur=max(cur,r);
              for(int i=r+1;i<=m;i++)
              {
                  while(a[i][c])
                  {
                  	if(a[r][c]==0) cur=max(cur,i);
                      for(int j=1;j<=n+1;j++)a[r][j]=a[r][j]^a[i][j];
                      swap(a[r],a[i]);
                  }
              }
              if(a[r][c]!=0)r++;
          }
          if(r<=n) return 0;
          printf("%d\n",cur);
          for(int i=n;i>=1;i--)
          {
              for(int j=i+1;j<=n;j++) a[i][n+1]^=(x[j]*a[i][j]);
              x[i]=a[i][n+1];
          }
      	for(int i=1;i<=n;i++)if(x[i]==0)printf("Earth\n");else printf("?y7M#\n");
          return 1;
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          bool flag=0;
          for(int i=1;i<=m;i++)
          {
              for(int j=1;j<=n;j++ )scanf("%1d",&a[i][j]); 
              scanf("%d",&a[i][n+1]);
          }
          if(!gauss())printf("Cannot Determine\n");
          return 0;
      }
      • 1

      *【高斯消元:异或方程组】[SDOI2010] 外星千足虫

      信息

      ID
      3588
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      21
      已通过
      7
      上传者