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 ...
随机推荐
- 001 Two Sum 两个数的和为目标数字
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- 案例49-crm练习获取客户列表带有分页和筛选功能
1 案例分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao 注意清空之前设置的聚合函数 dc.setProjection(null); 5 ...
- mac os安装macvim
1 brew install macvim 安装 macvim 2 alias vim='/usr/local/Cellar/macvim/7.4-73_1/MacVim.app/Contents/M ...
- 织梦DEDECMS {dede:arclist},{dede:list}获取附加表字段内容
以前用织梦DEDECMS做二次开发时获取附加表字段内容都是通过runphp执行SQL查询获得,最近看了看手册,发现一个非常简便的方法. 用arclist调用于附加表字段的方法: 方法一: 要获取附加表 ...
- 如何结合后台数据库 启动vue项目
一:连接数据库 1. 点击打开后输入密码 2.查看数据库 show databases; 3.创建数据库 create database jd; 删除数据库 drop database jd; 4.使 ...
- jenkins构建&发布git托管的VS工程
顺便做个笔记,以防以后再踩坑:笔者用的是jenkins-1.620和git-2.7.2-64-bit.exe,操作系统是win10(本机) jenkins安装完成之后 如果想要配合git完成拉取代码. ...
- 树莓派ssh报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决
初次使用树莓派,在使用树莓派本机网卡时被DHCP服务器分配到192.168.0.103,连接正常.于是乎很开心的将无线网卡插入树莓派,急于摆脱网线的束缚. ifconfig一下获取无线网卡的MAC地址 ...
- Debug Diagnostics Tool创建.Net异常转储并用Windbg分析异常
当我们要在IIS PRD环境下分析异常,并且对问题毫无头绪,又没有权限直接上打Log的代码.这个时候就是Debug Diagnostics Tool & Windbg大显神威的时候了. Deb ...
- deployment删除后,副本集未删除,解决之道
在删除的body上加上,body.setPropagationPolicy("Foreground");就可以删除deployment的同时连同副本集一同删除.
- Spring课程 Spring入门篇 3-5 Spring bean装配(上)之Resource
课程链接: 1 resource简析 2 resource代码演练 1 resource简析 urlsource:url对应的资源 classpath:获取类路径下的资源文件 filesystemre ...