码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1923: [Sdoi2010]外星千足虫

时间:2017-12-21 11:59:13      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:col   []   char   body   oid   ++   line   ios   php   

二次联通门 : BZOJ 1923: [Sdoi2010]外星千足虫

 

 

 

 

 

/*
    BZOJ 1923: [Sdoi2010]外星千足虫

    高斯消元解异或方程组

    模板题来一发
*/
#include <cstdio>
#include <iostream>
#include <bits/stdc++.h>
#define Max 2005
std :: bitset <1005> a[Max];
#define rg register
char s[Max];
inline void read (int &n)
{
    rg char c = getchar ();
    for (n = 0; !isdigit (c); c = getchar ());
    for (; isdigit (c); n = n * 10 + c - 0, c = getchar ());
}
int Answer;
inline void cmax (int &a, int b) { if (b > a) a = b; }
void Gauss (int N, int M)
{
    rg int i, j, n = 0, k;
    for (i = 1; i <= N; ++ i)
    {
        for (j = n + 1; !a[j][i] && j <= M; ++ j);
        if (j == M + 1) { Answer = -1; return ; }
        else cmax (Answer, j);
        for (++ n, std :: swap (a[j], a[n]), k = 1; k <= M; ++ k)
            if (k != n && a[k][i]) a[k] ^= a[n];
    }            
}
int main (int argc, char *argv[])
{
    int N, M, x; read (N), read (M); rg int i, j;
    for (i = 1; i <= M; ++ i)
    {
        scanf ("%s", s + 1);
        for (j = 1; j <= N; ++ j) a[i][j] = s[j] - 0;
        read (x); a[i][N + 1] = x;
    }
    Gauss (N, M);
    if (Answer != -1)
    {
        std :: cout << Answer << std :: endl;
        for (i = 1; i <= N; ++ i)
            if (a[i][N + 1]) puts ("?y7M#");
            else puts ("Earth");
    }
    else puts ("Cannot Determine");
    return 0;
}

 

BZOJ 1923: [Sdoi2010]外星千足虫

标签:col   []   char   body   oid   ++   line   ios   php   

原文地址:http://www.cnblogs.com/ZlycerQan/p/8078481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!