Time:2016.08.29
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗

【异或(XOR)运算由于与“奇偶性”密切相关,经常出现在有关奇偶性和二进制的题目中】
很多异或问题都要涉及到解异或方程组,因此首先要搞懂异或方程组的解法。

(1)异或方程组的格式(设有n个未知数,m个方程): a11*x1 XOR a12*x2 XOR … XOR a1n*xn = b1
a21*x1 XOR a22*x2 XOR … XOR a2n*xn = b2 …………………………………………………… am1*x1
XOR am2*x2 XOR … XOR amn*xn = bm
其中的所有a、b、x的值均为0或1。解异或方程组就是给出了所有的系数a和b之后,求出解(x1, x2 …
xn)。一般来说,题目的要求无非就是如下几种:<1>求任意一组解;<2>求解的总数;<3>求出最优解(比如字典序最小的解或者加权以后权值最大/小的解等)。

n个未知数,m个方程,上高斯消元就可以了
但是我们发现直接做的复杂度是O(n2m)O(n^2m)
所以又要引入一种神奇的STL东东——bitset
用它做位运算好像能降低一个指数
这样就可以满足要求了
关于无解的情况:只要有一个未知数在所有的方程中系数均为0,就是无解了
代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<bitset>
#include<string>
using namespace std;
int n,m,mx,ans[1003];
bool flag;
bitset<1003> f[2003];
char get()
{char ch=getchar();while (ch!='0'&&ch!='1') ch=getchar();return ch;
}
void gauss()
{int t;for (int i=1;i<=n;++i){flag=0;for (int j=i;j<=m;++j)if (flag=f[j][i]){t=j;mx=max(mx,j);break;}if (!flag) return;if (t!=i) swap(f[t],f[i]);for (int j=i+1;j<=m;++j)if (f[j][i])f[j]^=f[i];}for (int i=n;i;--i){t=f[i][n+1];for (int j=i+1;j<=n;++j) t^=ans[j]*f[i][j];ans[i]=t;}
}
main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;++i)for (int j=1;j<=n+1;++j)if (get()=='1') f[i].set(j);gauss();if (!flag) {printf("Cannot Determine");return 0;}printf("%d\n",mx);for (int i=1;i<=n;++i)if (!ans[i])puts("Earth");elseputs("?y7M#");
}


【BZOJ1923】外星千足虫,高斯消元解xor方程组相关推荐

  1. 第三十四章 数论——高斯消元解线性方程组

    第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...

  2. HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)

    题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...

  3. [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题

    [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...

  4. 高斯消元 AcWing 883. 高斯消元解线性方程组

    高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...

  5. 2020ICPC济南站 A题 Matrix Equation高斯消元求异或方程组

    2020ICPC济南站 A题 Matrix Equation高斯消元求异或方程组 题意 思路 Code() 传送门: https://ac.nowcoder.com/acm/contest/10662 ...

  6. POJ 2947 Widget Factory (高斯消元解同余方程组)

    题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...

  7. 高斯消元解线性方程组(浮点高斯消元模板)

    题目连接 https://www.acwing.com/problem/content/885/ 思路 高斯消元的思路如下: 1.我们从上到下,从左到右开始消元,对于每一行我们只保留当前[i,i]行的 ...

  8. 高斯消元——解线性方程组+球形空间产生器+开关问题

    传送门:https://www.acwing.com/activity/content/11/ 思路: 把原矩阵变成阶梯型矩阵解题步骤: 1.找到绝对值最大的一行. 2.将该行和最上面未处理好的一行交 ...

  9. AcWing 883. 高斯消元解线性方程组(高斯消元模板)

    先出裸的模板: #include<bits/stdc++.h>using namespace std; const int N = 110; typedef double db; db a ...

最新文章

  1. 17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步
  2. python3 练习3
  3. python画动态爱心-使用Python画出小人发射爱心的代码
  4. Delphi 中取本机的计算机名、IP地址、Windows登录的用户名
  5. SQL Server 2017 2019 Linux(Centos、Unbuntu16.04、Unbuntu18.04、Unbuntu20.04)安装过程详解
  6. 服务器端使用sendRedirect跳转到客户端异常
  7. Qt3转Qt5(Ui部分)
  8. ExtJS中listener方法和handler方法的区别
  9. java 生成枚举_为什么编译器在Java中生成Enums?
  10. 小米12 Ultra有望换装索尼传感器:牵手徕卡 搭载新一代影像旗舰
  11. 无法获取保存在session中的验证码
  12. 线程池的拒绝策略(重要)
  13. flume kafka storm mysql_flume+kafka+storm打通过程
  14. 安卓系统抓包工具大全
  15. Typora 中文字体深度修改
  16. Python3.6:根据m3u8下载mp4视频
  17. java异常处理(Exception handing)机制
  18. hdu 3932 Groundhog Build Home
  19. html5调用腾讯视频,小程序h5获取腾讯视频的真实mp4地址video!【前端+后端方法】...
  20. 分库分表和 NewSQL 到底怎么选?

热门文章

  1. matlab kmeans c 代码,K-means之matlab实现
  2. 工业机器人实训耗材_工业机器人实训室
  3. linux内核完全剖析0.11,linux0.11内核完全剖析 - ramdisk.c
  4. Java简单记事本设计实验报告_java记事本实验报告
  5. python打印字符金字塔_Python教程第7篇:print打印字符串
  6. Android 7.0判断栈顶Activity错误 几率显示为launcher
  7. 2048游戏c语言实验报告,2048游戏语言实验报告.doc
  8. php中find的函数_filter()、find()函数的区别
  9. CSS选择器与Xpath常用语法及对比
  10. 从零开始学keras之电影二分类