题目

P2447 [SDOI2010]外星千足虫

解析

sol写到自闭,用文字描述描述了半个小时没描述出来,果然还是要好好学语文

用高斯消元求解异或方程组。

因为

  • \(奇数\bigoplus奇数=偶数\)
  • \(偶数\bigoplus偶数=偶数\)
  • \(奇数\bigoplus偶数=奇数\)

\(0\)为偶数,\(1\)为奇数,

  • \((奇数+奇数)\mod 2=0\)
  • \((偶数+偶数)\mod 2=0\)
  • \((奇数+偶数)\mod 2=1\)

若把第一个里面的奇偶数分别换成\(1\)和\(0\),则对于\((x_1+x_2)\bmod 2\)的操作,可以看做异或操作(\(x_1\bigoplus x_2\))。

易证,\((x_1+x_2+x_3+···+x_n)\mod 2 = x_1\bigoplus x_2\bigoplus x_3 \bigoplus ···\bigoplus x_n\)。

对于主元所在的列,我们只让主元行上的数为\(1\),其余的为\(0\),于是我们让每一行与当前主元行比较,若某一行的这个数为\(1\),就让这一行异或主元行。

因为我们之前处理当前主元行以上的内容时,把除了当时主元行上的所有当时主元所在列上的数都异或成了\(0\),所以我们当前主元行主元之前的数都为0,根据异或的性质,发现当前主元行前面的\(0\)对之前处理的行没有影响,这样更新到最后,我们会得到一个单位矩阵,

其实手动一模拟就出来了。。

如$$\begin{bmatrix}

0&1&1&\mid&1\

1&0&1&\mid&0\

0&0&1&\mid&1

\end{bmatrix}

\to\begin{bmatrix}

1&0&1&\mid&0\

0&1&1&\mid&1\

0&0&1&\mid&1

\end{bmatrix}

\to\begin{bmatrix}

1&0&0&\mid&1\

0&1&0&\mid&0\

0&0&1&\mid&1

\end{bmatrix}\$$

于是就得到了答案。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
bitset<N> a[N];
char s[N];
int n, m, ans; template<class T>inline void read(T &x) {
x = 0;int f = 0;char ch = getchar();
while(!isdigit(ch)) f |= (ch == '-'),ch = getchar();
while(isdigit(ch)) x = x * 10 + ch -'0',ch = getchar();
x = f ? -x : x;
return ;
} void Gauss() {
for (int i = 1; i <= n; ++i) {
int k = i;
while (!a[k][i] && k <= m) k++;
if (k == m + 1) {
ans = -1;
return;
}
ans = max(ans, k);
if (k != i) swap(a[k], a[i]);
for (int j = 1; j <= m; ++j)
if (j != i && a[j][i]) a[j] ^= a[i];
}
return;
} int main() {
read(n), read(m);
for (int i = 1, x; i <= m; ++i) {
scanf("%s", s);
for (int j = 0; j < n; ++j) a[i][j + 1] = s[j] - '0';
read(x);
a[i][n + 1] = x;
}
Gauss();
if (ans == -1) printf("Cannot Determine\n");
else {
printf("%d\n", ans);
for (int i = 1; i <= n; ++i)
printf(a[i][n + 1] == 1 ? "?y7M#\n" : "Earth\n");
}
return 0;
}

P2447 [SDOI2010]外星千足虫 (高斯消元)的更多相关文章

  1. Luogu P2447 [SDOI2010]外星千足虫 高斯消元

    链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #inclu ...

  2. BZOJ 1923: [Sdoi2010]外星千足虫 [高斯消元XOR]

    1923: [Sdoi2010]外星千足虫 对于 100%的数据,满足 N≤1,000,M≤2,000. 裸高斯消元解异或方程组 给定方程顺序要求用从上到下最少的方程,那么找主元时记录一下最远找到哪个 ...

  3. 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元

    [BZOJ1923][Sdoi2010]外星千足虫 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 ...

  4. BZOJ1923:[SDOI2010]外星千足虫(高斯消元)

    Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...

  5. BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)

    题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...

  6. BZOJ 1923: [Sdoi2010]外星千足虫 高斯消元+bitset

    高斯消元求解异或方程组,可以多学一下 $bitset$ 在位运算中的各种神奇操作. #include <cstdio> #include <bitset> #define N ...

  7. 【BZOJ-1923】外星千足虫 高斯消元 + xor方程组

    1923: [Sdoi2010]外星千足虫 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 766  Solved: 485[Submit][Status ...

  8. LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元

    问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...

  9. [bzoj1923]外星千足虫[高斯消元]

    高斯消元解异或方程组 #include <iostream> #include <algorithm> #include <cstdio> #include < ...

随机推荐

  1. sql server 生成数据库字典 sql语句

    SELECT TOP 100 PERCENT --a.id,          CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,      ...

  2. C#中public、private、protected等关键字说明

    public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问. ...

  3. MVC 中的@Html.Raw 的用法

    @Html.Raw 定义:在有些情况下,需要显式地渲染一些不应该采用HTML编码的值,这时可以采用Html.Raw方法来保证该值不被编码:简单来说:就是使用了Html.Raw后,字符串会以一个html ...

  4. python 自定义模块的发布和安装

    [学习笔记] 自定义模块 使用的是pycharm 说白了就是.py文件都可以作为模块导入,像定义一个文件 名字为Mycode __all__ = ["add","sub& ...

  5. Java并发——synchronized关键字

    前言: 只要涉及到Java并发那么我们就会考虑线程安全,实际上能够实现线程安全的方法很多,今天先介绍一下synchronized关键字,主要从使用,原理介绍 一.synchronized的使用方法 1 ...

  6. 微信小程序 picker 中range-key的坑

    <picker class='fr' bindchange="onChangeBuild" range-key="{{'num'}}" value=&qu ...

  7. 20190404-transition、transform转换、animation、媒体查询

    目录 1.transition过渡 1.1简写:transiton:transition-property | transition-duration | transition-timing-func ...

  8. Fragment生命周期以及使用时的小问题

    前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...

  9. Delphi IfThen语句

    function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string; overload; $[StrU ...

  10. python3 re模块正则匹配字符串中的时间信息

    匹配时间: # -*- coding:utf-8 -*- import re def parseDate(l): patternForTime = r'(\d{4}[\D]\d{1,2}[\D]\d{ ...