【题解】Luogu P2447 [SDOI2010]外星千足虫
原题传送门
根据题意,题目给的每个操作就相当于异或上选中的那几只虫子的足数(mod 2)等于0/1
这是一个异或方程组,珂以用高斯消元解出每个虫子的足数(mod 2)、所需最小次数或判断有多解
但是看题目数据范围\(n \leq 1000,m \leq 2000\),如果直接高斯消元\(O(n^2m)\)的话超时无疑
观察这题的个性:方程组中要通过上下行异或进行消元,这是位运算,一定珂以用bitset优化
我们对每一行开一个bitset,这样消元时直接把两行的bitset异或起来,复杂度为\(O(\frac{n^2m}{\omega})\)
#include <bits/stdc++.h>
#define N 1005
#define M 2005
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int Max(register int x,register int y)
{
return x>y?x:y;
}
bitset<N> b[M];
int n,m,now,ans;
int main()
{
n=read(),m=read();
for(register int i=1;i<=m;++i)
for(register int j=1;j<=n+1;++j)
{
char ch=getchar();
while(ch!='0'&&ch!='1')
ch=getchar();
b[i][j]=ch-'0';
}
for(register int i=1;i<=n;++i)
{
now=i;
while(now<=m&&!b[now][i])
++now;
if(now==m+1)
{
puts("Cannot Determine");
return 0;
}
ans=Max(ans,now);
if(now!=i)
swap(b[i],b[now]);
for(register int j=1;j<=m;++j)
{
if(i==j||!b[j][i])
continue;
b[j]^=b[i];
}
}
write(ans),puts("");
for(register int i=1;i<=n;++i)
if(b[i][n+1])
puts("?y7M#");
else
puts("Earth");
return 0;
}
【题解】Luogu P2447 [SDOI2010]外星千足虫的更多相关文章
- Luogu P2447 [SDOI2010]外星千足虫
题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...
- Luogu P2447 [SDOI2010]外星千足虫 高斯消元
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #inclu ...
- 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]外星千足虫
题目大意:有$n$个数,每个数为$0$或$1$,给你其中一些关系,一个关系形如其中几个数的异或和是多少,问最少知道前几个关系就可以得出每个数是什么,并输出每个数 题解:异或方程组,和高斯消元差不多,就 ...
- 洛谷P2447 [SDOI2010]外星千足虫(异或方程组)
题意 题目链接 Sol 异或高斯消元的板子题. bitset优化一下,复杂度\(O(\frac{nm}{32})\) 找最优解可以考虑高斯消元的过程,因为异或的特殊性质,每次向下找的时候找到第一个1然 ...
- 【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)
bzoj1923,戳我戳我 Solution: 这个高斯消元/线性基很好看出来,主要是判断在第K 次统计结束后就可以确定唯一解的地方和\(bitset\)的骚操作 (我用的线性基)判断位置,我们可以每 ...
- 洛咕 P2447 [SDOI2010]外星千足虫
一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h& ...
随机推荐
- SqlServer数据库优化之索引、临时表
问题:工作是查询一张500万多条数据的表时,查询总是很慢,于是进行优化. --查询表所有索引 use RYTreasureDB EXEC Sp_helpindex [RecordDrawScore] ...
- Nginx服务加到systemctl
当我们编译安装nginx服务后,可以用手执行启动脚本也可以作为服务的形式运行. 添加启动文件:vim /usr/lib/systemd/system/nginx.service [Unit] Desc ...
- linuxIP地址配置字段说明
虚拟机网络适配器改成桥接 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 设备名称 BOOTPROTO=dhcp /static 自动 ...
- vue-router模式history与hash
[重点] history与hash路由的区别 hash前端路由,无刷新 history 会去请求接口 vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 U ...
- Win7下安装openssl
安装环境: 操作系统:window7(64位) C++编译器:VS2012 -------------------------------------------------------------- ...
- linux服务器NAT后无法在内网通过外部IP访问内部服务的问题
场景一: 将外网访问192.168.100.10的80端口转发到192.168.75.5:8000端口. # iptables -t nat -A PREROUTING -d 192.168.100. ...
- jieba模块
jieba模块 下载 pip install jieba 使用 import jieba 精确模式 jieba.cut() 直接打印出的是单个文字 转换成列表-->jieba.lcut() im ...
- html--前端javascript初识
一.JavaScript简介 JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动.使用它的目的是与HTML超文本标识语言.Java 脚本语 ...
- Educational Codeforces Round 78 (Rated for Div. 2) B. A and B
链接: https://codeforces.com/contest/1278/problem/B 题意: You are given two integers a and b. You can pe ...
- postfix发邮件失败,日志和postqueue -p提示Connection refused
1. postfix服务未启动 2. /etc/postfix/main.cf文件中未设置inet_interfaces = all