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]外星千足虫 (高斯消元)的更多相关文章
- Luogu P2447 [SDOI2010]外星千足虫 高斯消元
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #inclu ...
- BZOJ 1923: [Sdoi2010]外星千足虫 [高斯消元XOR]
1923: [Sdoi2010]外星千足虫 对于 100%的数据,满足 N≤1,000,M≤2,000. 裸高斯消元解异或方程组 给定方程顺序要求用从上到下最少的方程,那么找主元时记录一下最远找到哪个 ...
- 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元
[BZOJ1923][Sdoi2010]外星千足虫 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 ...
- BZOJ1923:[SDOI2010]外星千足虫(高斯消元)
Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
- BZOJ 1923: [Sdoi2010]外星千足虫 高斯消元+bitset
高斯消元求解异或方程组,可以多学一下 $bitset$ 在位运算中的各种神奇操作. #include <cstdio> #include <bitset> #define N ...
- 【BZOJ-1923】外星千足虫 高斯消元 + xor方程组
1923: [Sdoi2010]外星千足虫 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 766 Solved: 485[Submit][Status ...
- LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元
问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...
- [bzoj1923]外星千足虫[高斯消元]
高斯消元解异或方程组 #include <iostream> #include <algorithm> #include <cstdio> #include < ...
随机推荐
- Java 在PDF中添加水印——文本/图片水印
水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...
- JVM虚拟机基本概念
一.JVM运行时数据区域1.1.程序计数器 一块较小的内存空间,当前线程所执行的字节码指示器.每个线程有一个独立的程序计数器1.2.Java虚拟机栈 线程私有,生命周期与线程相同 每个方法在执行时会创 ...
- 【spring实战第五版遇到的坑】3.2中配置关系映射时,表名和3.1中不一样
3.2章中按照书中的步骤写好相应类的映射关系,发现启动时,之前在3.1章中建的表全部被删重新建立了,并且Ingredient表的数据没了,由于使用了JPA,默认使用的是hibernate,在启动时会删 ...
- js 控制随机数生成概率
基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围. 'use strict'; export default class GL { /** * 构造函数 * @pa ...
- Python机器学习实践:决策树判别汽车金融违约用户
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 法纳斯特(公众号ID:walker398) 作者 | 小F 决策树呈树形结构,是一种基本的回 ...
- arcgis api 3.x for js 入门开发系列十五台风轨迹
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- [置顶]生鲜配送管理系统_升鲜宝V2.0 销售订单汇总_采购任务分配功能_操作说明
做好生鲜供应链系统,要注意三个方面,1.分拣 2 采购 3 库存,市面上做的比较成熟的功能,还是分拣这一块(按客户分拣.按订单分拣.按商品分类分拣.按商品分拣.按线路分拣.客户自由组合分拣)[下篇文 ...
- Android远程桌面助手(B1371)
Android远程桌面助手(B1371),下载:https://files.cnblogs.com/files/we-hjb/ARDC%28B1371%29.7z 1.增加了对超大分辨率4320*21 ...
- Python使用Plotly绘图工具,绘制饼图
今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...
- node.js解析微信消息推送xml格式加密的消息
之前写过一个解密json格式加密的,我以为xml的和json的差不多,是上上个星期五吧,我的同事也是在做微信公众号里面的消息推送解密,发现好像只能使用xml加密格式的发送到服务器,我们去年也做过企业微 ...