bzoj 1923 [Sdoi2010]外星千足虫(高斯消元+bitset)
1923: [Sdoi2010]外星千足虫
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 634 Solved: 397
[Submit][Status][Discuss]
Description
Input
接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果。每行
包含一个“01”串和一个数字,用一个空格隔开。“01”串按位依次表示每只虫
子是否被放入机器:如果第 i 个字符是“0”则代表编号为 i 的虫子未被放入,“1”
则代表已被放入。后面跟的数字是统计的昆虫足数 mod 2 的结果。
由于 NASA的实验机器精确无误,保证前后数据不会自相矛盾。即给定数据
一定有解。
Output
超过M的正整数K,表明在第K 次统计结束后就可以确定唯一解;接下来 N 行
依次回答每只千足虫的身份,若是奇数条足则输出“?y7M#”(火星文),偶数
条足输出“Earth”。如果输入数据存在多解,输出“Cannot Determine”。
所有输出均不含引号,输出时请注意大小写。
Sample Input
011 1
110 1
101 0
111 1
010 1
Sample Output
Earth
?y7M#
Earth
HINT
对于 20%的数据,满足 N=M≤20;
对于 40%的数据,满足 N=M≤500;
对于 70%的数据,满足 N≤500,M≤1,000;
对于 100%的数据,满足 N≤1,000,M≤2,000。
==========================================================
(′д`σ)σ 请不要提交!
Source
【思路】
高斯消元
因为是模2,所以问题就是解一个XOR的方程组。需要使用位压,可以调用bitset。
【代码】
#include<cstdio>
#include<bitset>
using namespace std; const int N = 1e3+; bitset<N> a[*N];
char s[N];
int n,m,ans; void gause() {
int i,j,r,now=;
for(i=;i<n;i++,now++) {
r=now;
while(r<m && !a[r][i]) r++;
if(r==m) { ans=-; return ; } //出现自由变量
else ans=max(ans,r); //最小使用 r
if(r!=now) swap(a[now],a[r]);
for(j=;j<m;j++)
if(j!=now && a[j][i]) a[j]^=a[now];
}
} int main() {
//freopen("insect10.in","r",stdin);
//freopen("insect.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<m;i++) {
scanf("%s",s);
for(int j=;j<n;j++)
a[i][j]=s[j]-'';
scanf("%s",s);
a[i][n]=s[]-'';
}
gause();
if(ans<) puts("Cannot Determine");
else {
printf("%d\n",ans+);
for(int i=;i<n;i++)
if(a[i][n]) puts("?y7M#");
else puts("Earth");
}
return ;
}
bzoj 1923 [Sdoi2010]外星千足虫(高斯消元+bitset)的更多相关文章
- BZOJ 1923: [Sdoi2010]外星千足虫 高斯消元+bitset
高斯消元求解异或方程组,可以多学一下 $bitset$ 在位运算中的各种神奇操作. #include <cstdio> #include <bitset> #define N ...
- BZOJ 1923: [Sdoi2010]外星千足虫 [高斯消元XOR]
1923: [Sdoi2010]外星千足虫 对于 100%的数据,满足 N≤1,000,M≤2,000. 裸高斯消元解异或方程组 给定方程顺序要求用从上到下最少的方程,那么找主元时记录一下最远找到哪个 ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
- P2447 [SDOI2010]外星千足虫 (高斯消元)
题目 P2447 [SDOI2010]外星千足虫 解析 sol写到自闭,用文字描述描述了半个小时没描述出来,果然还是要好好学语文 用高斯消元求解异或方程组. 因为 \(奇数\bigoplus奇数=偶数 ...
- 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元
[BZOJ1923][Sdoi2010]外星千足虫 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 ...
- BZOJ1923:[SDOI2010]外星千足虫(高斯消元)
Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...
- Luogu P2447 [SDOI2010]外星千足虫 高斯消元
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #inclu ...
- BZOJ 1923 SDOI2010 外星千足虫 异或方程组+bitset
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1923 懒得贴题目了......这就是解一个异或方程组的裸题...... YY了一下异或方程 ...
- 【BZOJ-1923】外星千足虫 高斯消元 + xor方程组
1923: [Sdoi2010]外星千足虫 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 766 Solved: 485[Submit][Status ...
随机推荐
- 在Android上模拟登录广工正方教务系统查询成绩
这是在博客园里开博以来写的第一篇博客. 因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章,自己觉得挺好玩的便也去动手一做,开始还以为挺难的,但实际做起来还蛮简单的,当然其中还有些小插曲. ...
- Android学习笔记(SQLite的简单使用)
1.SQLite介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且 ...
- Python:文件操作
#!/usr/bin/python3 str1 = input("请输入:") print("你输入的是:",str1) f=open("abc.tx ...
- 设计模式之 Singleton 单例模式
先上两段代码,区别仅在于是否涉及线程安全. 首先是不涉及多线程的单例: public class Singleton { private final static Singleton INSTANCE ...
- angularjs应用骨架
使用典型的类库时,你可以选择并使用你所喜欢的功能:而对于angularjs框架来说,必须把它看成一个完整的套件来使用,框架中的所有的东西都包含在里面,接下来将会介绍angular的基础模块,这样你就可 ...
- gnome中文翻译之po
文件类型: po: 用msginit分析pot文件,生成各语言对应的po文件,比如中文的zh_CN.po. mo: 用msgfmt将po文件编译生成mo文件,这是二进制文件,不能直接编辑. gmo: ...
- 18款js和jquery文字特效代码分享
18款js和jquery文字特效代码分享 jQCloud标签云插件_热门城市文字标签云代码 js 3d标签云特效关键词文字球状标签云代码 原生JS鼠标悬停文字球状放大显示效果代码 原生js文字动画圆形 ...
- [C#学习]在多线程中如何调用Winform[转]
问题的产生: 我的WinForm程序中有一个用于更新主窗口的工作线程(worker thread),但文档中却提示我不能在多线程中调用这个form(为什么?),而事实上我在调用时程序常常会崩掉.请问如 ...
- 简单学C——第三天
控制结构(二) 前面我们已经了解到了,控制结构中的判断结构,当然switch语句也是判断语句.不过如果if...else...语句你会了,我相信switch语句你也一定会的,它们的功能都是差不 ...
- ASP 验证、查询AD域账户信息
'''函数功能:查询域用户信息 '''参数说明:strAdmin-域管理账户:Password-域帐户密码:Domain-域服务器. ''' ''' 参考资料:http://www.experts-e ...