怎么说呢?

因为是在mod 2 意义下的吗(一般是遇到二就可能是位运行算或二分图)

就可以利用异或计算。

因为奇数和偶数在二进制上就用判断最后一位就可以了

然后因为异或符合交换律和结合律

直接消元就可以辣

不过对于这个题,输出第一个数字可能是对与我这种蒟蒻的一个挑战。所以,我会在代码中详细的注释

bitset

#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]外星千足虫的更多相关文章

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

    题目 P2447 [SDOI2010]外星千足虫 解析 sol写到自闭,用文字描述描述了半个小时没描述出来,果然还是要好好学语文 用高斯消元求解异或方程组. 因为 \(奇数\bigoplus奇数=偶数 ...

  2. 洛谷 P2447 [SDOI2010]外星千足虫

    P2447 [SDOI2010]外星千足虫 题目描述 公元2089年6月4日,在经历了17年零3个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆.此枚火箭由美国国家航空航天局(NASA)研 ...

  3. 【P2447 [SDOI2010]外星千足虫】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2447 dalao们都说简单...解异或方程组 可我不是dalao qwq #include <algo ...

  4. 洛谷P2447 [SDOI2010]外星千足虫(异或方程组)

    题意 题目链接 Sol 异或高斯消元的板子题. bitset优化一下,复杂度\(O(\frac{nm}{32})\) 找最优解可以考虑高斯消元的过程,因为异或的特殊性质,每次向下找的时候找到第一个1然 ...

  5. 洛咕 P2447 [SDOI2010]外星千足虫

    一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h& ...

  6. [洛谷P2447][SDOI2010]外星千足虫

    题目大意:有$n$个数,每个数为$0$或$1$,给你其中一些关系,一个关系形如其中几个数的异或和是多少,问最少知道前几个关系就可以得出每个数是什么,并输出每个数 题解:异或方程组,和高斯消元差不多,就 ...

  7. 【题解】Luogu P2447 [SDOI2010]外星千足虫

    原题传送门 根据题意,题目给的每个操作就相当于异或上选中的那几只虫子的足数(mod 2)等于0/1 这是一个异或方程组,珂以用高斯消元解出每个虫子的足数(mod 2).所需最小次数或判断有多解 但是看 ...

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

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

  9. Luogu P2447 [SDOI2010]外星千足虫

    题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...

随机推荐

  1. scrapy 组合多个页面的数据一并存储

    暂不重复,请看参考信息 参考: https://segmentfault.com/q/1010000009651745/a-1020000009652641 https://www.jianshu.c ...

  2. HTML5 video 连续播放视频

    HTML Video标签属性 html页面代码 <video height="2160" id="playVideo" width="3840& ...

  3. Sqlite操作的一些关键类的官方说明与Intent的startactivityforresult方法

    Intent: 该功能可以用于通过intent来跳转界面时候传递信号给原理的页面,以便做出一些处理: sqlite的使用: 该方法得到的sqlitedatabase可读可写,而getreadabled ...

  4. spring boot基本认识

    大家眼中的spring boot:https://www.zhihu.com/question/39483566-------------------------------------------- ...

  5. 切图技巧——PS篇

    1.选框工具这里可以选择增加选区.减少选区 ==> 2.存储为web格式 1)JPG:一般用于大图 2)gif:可作动图,与png-8基本一样,不支持半透明 3)png-8:不支持动图,不支持半 ...

  6. scrollHieght、offsetHeight、clientHeight、width、height

    1.scroll滚动(scrollTop.Left.Height.Width) scroll()当用户滚动指定的元素时,会发生 scroll 滚动事件: scrollWidth.scrollHeigh ...

  7. git分支合并冲突

    合并冲突 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们. 如果你对 #53 问题的修改和有关 hotfix 的修改都涉及到同一个文件的同一处,在合并 ...

  8. 树莓派WLAN连接PC(不通过路由器)

    上一篇博文捣鼓了一下树莓派直连线连接PC.吃完午饭心血来潮,树莓派既然能用直连线连接PC,曾经也试过拿PC当作热点,为何不尝试一下用WLAN将树莓派与PC互连呢?果断搞起. 首先,我当前笔记本是用WL ...

  9. [JAVA][Liferay] Configure sharding in multiple sites

    create databases first portal-ext.properties配置 hibernate.dialect=org.hibernate.dialect.PostgreSQLDia ...

  10. Version Control&Git

    首先了解一下什么是版本控制: Version control (版本控制)是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 其次版本控制最主要的功能 ...