zoukankan      html  css  js  c++  java
  • [SDOI2010]外星千足虫

    题解:

    一道高斯消元的裸题

    把问题转化为xor的值

    之后用bitset优化高斯消元(一个个xor变成一排一起xor) 这样是n^3/32的

    另外每一次找方程时只要在下面找到一个当前系数大于0的方程就说明他是有用的(因为如果和上面是重复的那一定等于0了)

    当找不到大于0的说明方程缺失

    当出现0000000,1时 说明方程无解(当然此题没有这个情况)

     代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define N 2010
    int n,ans,m;
    bitset<1010> a[N];
    char c[N];
    void pri()
    {
      /*
        for (int i=0;i<m;i++)
      {
        cout<<endl;
        for (int j=0;j<=n;j++)
          cout<<a[i][j];
      }
      cout<<endl<<endl<<endl;
    */
    }
    bool Gauss()
    {
      int now;
      for (int i=0;i<n;i++)
      {
        now=-1;
        for (int j=i;j<m;j++)
          if (a[j][i])
          {
            now=j; break;
          }
        if (now==-1) return(0);
        ans=max(ans,now);
        if (now!=i) swap(a[i],a[now]);
        pri();
        for (int j=0;j<m;j++)
          if (j!=i&&a[j][i])
            a[j]^=a[i];
        pri();
      }
      return 1;
    }
    int main()
    {
      cin>>n>>m;
      int x;
      for (int i=0;i<m;i++)
      {
        cin>>c;
        for (int j=0;j<n;j++) a[i][j]=c[j]-'0';
        cin>>x;
        a[i][n]=x;
      }
      pri();
      if (!Gauss()) cout<<"Cannot Determine";
      else 
      {
        cout<<ans+1<<endl;
        for (int j=0;j<n;j++)
          if (a[j][n]) cout<<"?y7M#"<<endl;
          else cout<<"Earth"<<endl;
      }
      return 0;
    }
  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8711357.html
Copyright © 2011-2022 走看看