P2447 [SDOI2010]外星千足虫
怎么说呢?
因为是在mod 2 意义下的吗(一般是遇到二就可能是位运行算或二分图)
就可以利用异或计算。
因为奇数和偶数在二进制上就用判断最后一位就可以了
然后因为异或符合交换律和结合律
直接消元就可以辣
不过对于这个题,输出第一个数字可能是对与我这种蒟蒻的一个挑战。所以,我会在代码中详细的注释
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<bitset>
using namespace std;
char in[52000];
bitset<2010>map[2010];//黑科技
int n,m;
int ans[2010];//记录答案
bool gauss(int &res)//此处为引用
{
for(int i=1;i<=n;i++)
{
int r=i;
while(!map[r][i]&&r<m+1)
r+=1;
if(r==m+1)
return false;
else
res=max(res,r);//从第一个条件一个一个往下找,直到找到一个第i项系数不为零
if(i!=r)
swap(map[i],map[r]);//提上来
for(int j=i+1;j<=m;j++)//注意:这里是把所有条件的第i项全消了
if(map[j][i])
map[j]^=map[i];//bitset支持一行与另一行异或
}
ans[n]=map[n][n+1];//往回带
for(int i=n-1;i>=1;i--)
{
ans[i]=map[i][n+1];
for(int j=i+1;j<=n;j++)
ans[i]^=(ans[j])*(map[i][j]);//注意系数
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%s",in+1);
//printf("%s",in+1);
for(int j=1;j<=n;j++)
map[i][j]=in[j]-'0';//bitset可以直接赋值
int t;
scanf("%d",&t);
map[i][n+1]=t;
}
int judge=0;//judge是判断到第几个条件就可以求出所有解
if(!gauss(judge))
printf("Cannot Determine");
else
{
printf("%d\n",judge);
for(int i=1;i<=n;i++)
{
switch(ans[i])
{
case 1:printf("?y7M#\n");break;
case 0:printf("Earth\n");break;
}
}
}
}
P2447 [SDOI2010]外星千足虫的更多相关文章
- P2447 [SDOI2010]外星千足虫 (高斯消元)
题目 P2447 [SDOI2010]外星千足虫 解析 sol写到自闭,用文字描述描述了半个小时没描述出来,果然还是要好好学语文 用高斯消元求解异或方程组. 因为 \(奇数\bigoplus奇数=偶数 ...
- 洛谷 P2447 [SDOI2010]外星千足虫
P2447 [SDOI2010]外星千足虫 题目描述 公元2089年6月4日,在经历了17年零3个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆.此枚火箭由美国国家航空航天局(NASA)研 ...
- 【P2447 [SDOI2010]外星千足虫】 题解
题目链接:https://www.luogu.org/problemnew/show/P2447 dalao们都说简单...解异或方程组 可我不是dalao qwq #include <algo ...
- 洛谷P2447 [SDOI2010]外星千足虫(异或方程组)
题意 题目链接 Sol 异或高斯消元的板子题. bitset优化一下,复杂度\(O(\frac{nm}{32})\) 找最优解可以考虑高斯消元的过程,因为异或的特殊性质,每次向下找的时候找到第一个1然 ...
- 洛咕 P2447 [SDOI2010]外星千足虫
一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h& ...
- [洛谷P2447][SDOI2010]外星千足虫
题目大意:有$n$个数,每个数为$0$或$1$,给你其中一些关系,一个关系形如其中几个数的异或和是多少,问最少知道前几个关系就可以得出每个数是什么,并输出每个数 题解:异或方程组,和高斯消元差不多,就 ...
- 【题解】Luogu P2447 [SDOI2010]外星千足虫
原题传送门 根据题意,题目给的每个操作就相当于异或上选中的那几只虫子的足数(mod 2)等于0/1 这是一个异或方程组,珂以用高斯消元解出每个虫子的足数(mod 2).所需最小次数或判断有多解 但是看 ...
- Luogu P2447 [SDOI2010]外星千足虫 高斯消元
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #inclu ...
- Luogu P2447 [SDOI2010]外星千足虫
题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...
随机推荐
- python 基础内置函数表及简单介绍
内建函数名 (表达形式) 主要作用 备注 abs(x) 返回一个X值得绝对值(x=int/float/复数) all(iterable) 如果 iterable 的所有元素均为 True(或 iter ...
- eclipse 分屏显示同一文件
某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -> Toggle Split Editor (C ...
- The Falling Leaves UVA - 699
题目链接:https://vjudge.net/problem/UVA-699 题目大意:给一颗二叉树,每个结点都有一个水平位置 :左子节点在它左边的1个单位,右子结点在它右边1个单位.从左向右输出每 ...
- std::map Intro
#include <queue>#include <map>#include <iostream>#include <string.h> class T ...
- Unity 物体旋转会发生变形
当游戏对象的 "父物体们" 有一个是缩放的,也就是Scale不是(1,1,1)的时候,旋转这个游戏对象它就会出现变形的现象.
- SimpleAdapter与listview,gridview的组合用法
首先要明白SimpleAdapter构造方法的几个参数的含义: public SimpleAdapter(Context context, List<? extends Map<Strin ...
- Python 的命名空间
Python命名空间的本质: 一.命名空间的定义: 二.命名空间的查找顺序: 三.命名空间的生命周期: 四.通过locals()和globals() BIF访问命名空间. 重点是第四部分,我们将在此部 ...
- 关于Vim 的插件snipmate 以及它的安装方式
在网上看了http://study.163.com/course/courseMain.htm?courseId=269016#/courseMain 里关于snipmate 的视频 snipma ...
- 01-取消文件与svn服务器的关联
有的时候一个和svn服务器关联的文件,svn的链接已经失效,但是文件还是显示和svn关联的状态. 下面主要是解决怎么取消一个文件和svn服务器的关联. 1 新建一个文本文件 在任意目录下新建一个文本文 ...
- 纯CSS控制背景图片100%自适应填充布局
https://blog.csdn.net/wd4java/article/details/50537562 解决: html,body{height: 100%;width: 100%;marg ...