【bzoj1923】[Sdoi2010]外星千足虫 高斯消元解xor方程组
2016-03-17 08:53
316 查看
Description
Input
第一行是两个正整数 N, M。 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果。每行 包含一个“01”串和一个数字,用一个空格隔开。“01”串按位依次表示每只虫 子是否被放入机器:如果第 i 个字符是“0”则代表编号为 i 的虫子未被放入,“1” 则代表已被放入。后面跟的数字是统计的昆虫足数 mod 2 的结果。 由于 NASA的实验机器精确无误,保证前后数据不会自相矛盾。即给定数据 一定有解。Output
在给定数据存在唯一解时有 N+1行,第一行输出一个不 超过M的正整数K,表明在第K 次统计结束后就可以确定唯一解;接下来 N 行 依次回答每只千足虫的身份,若是奇数条足则输出“?y7M#”(火星文),偶数 条足输出“Earth”。如果输入数据存在多解,输出“Cannot Determine”。 所有输出均不含引号,输出时请注意大小写。Sample Input
3 5 011 1 110 1 101 0 111 1 010 1
Sample Output
4 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
第一轮Day1稍微画画就看出来是个xor方程组…
然后还是去抄了份模板…
bitset好厉害啊…
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<bitset> using namespace std; typedef long long LL; const int SZ = 2010; const int INF = 1000000010; bitset<SZ> g[SZ]; int ans = 0; int n,m; bool gauss() { int now = 0; for(int i = 1;i <= n;i ++) { int j = now + 1; while(j <= m && !g[j][i]) j ++; if(j > m) return false; else ans = max(ans,j); now ++; swap(g[j],g[now]); for(int j = 1;j <= m;j ++) if(j != now && g[j][i]) g[j] ^= g[now]; } return true; } char str[SZ]; int main() { scanf("%d%d",&n,&m); for(int i = 1;i <= m;i ++) { scanf("%s",str + 1); for(int j = 1;j <= n;j ++) g[i][j] = str[j] - '0'; scanf("%s",str + 1); g[i][n + 1] = str[1] - '0'; } if(!gauss()) puts("Cannot Determine"); else { printf("%d\n",ans); for(int i = 1;i <= n;i ++) if(g[i][n + 1]) puts("?y7M#"); else puts("Earth"); } return 0; }
相关文章推荐
- 项目3:输出星号图
- 开发者可以使用Docker做什么?
- 第三周项目4:穷举法解决组合问题(7)谁是小偷
- 第三周【项目3:输出星号图】
- iOS小菜那些年写过的宏文件
- 如何在js中判断两个字符串a,b相同 a=b??
- Matlab中实用的命令
- 秒懂科技新概念
- 第3周项目3:输出星号图(5)
- 图像特征提取_大致的特征类型
- kinderEditor + Struts2整合
- 今天开始做项目了
- 【C++】new和delete运算符
- 关于SQL连接语句中的Integrated Security=SSPI/ture/false
- 第三周训练,个税计算器
- 每年每月多少天
- Symfony2中被遗弃的getRequest()方法分析
- 第三周上机实践项目 项目4--穷举法求数列
- 如何收房
- 我的惯性错误