【BZOJ】【3503】【CQOI2014】和谐矩阵
高斯消元解Xor方程组
Orz ZYF o(︶︿︶)o 唉我的数学太烂了……
错误思路:对每个格点进行标号,然后根据某5个异或和为0列方程组,高斯消元找自由元……(目测N^3会TLE)
ZYF的正确思路:
如果第一行的数知道了,我们就可以推出其他行的数。
那么如何判断第一行的数的一种填法是否合法呢?很简单,我们递推出m+1行的数,当且仅当这一行都是0时满足题意。
那么,我们就有了一种想法。
直接把m+1行的每个数用x[1..n]表示出来,这一定是个系数只为0/1的式子。然后让这个异或值=0,就可以解异或方程组了。
有个奇怪错误:将long long 直接转成bitset会有位数丢了……只能一位一位往过转= =
/**************************************************************
Problem: 3503
User: Tunix
Language: C++
Result: Accepted
Time:56 ms
Memory:1292 kb
****************************************************************/ //BZOJ 3503
#include<bitset>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*=sign;
}
/******************tamplate*********************/
const int N=;
int n,m;
typedef long long LL;
LL b[N][N];
bitset<N>a[N],c[N]; void gauss(){//准确的说这是高斯-约当消元法?
F(i,,n+){
int j=i;
while(j<=n && !a[j][i]) j++;
if(j>n) continue;//如果这一位全是0……(自由元)
if(i!=j) swap(a[i],a[j]);
F(j,,n)
if(i!=j && a[j][i]) a[j]^=a[i];
}
}
int main(){
ios::sync_with_stdio(false);
m=getint(); n=getint(); F(i,,n) b[][i]=(LL)<<i-; F(i,,m+)
F(j,,n)
b[i][j]=b[i-][j]^b[i-][j-]^b[i-][j+]^b[i-][j];
F(i,,n)
F(j,,n)
a[i][j]=b[m+][i]>>(j-)&;
// a[i]=b[m+1][i],a[i]<<=1; 这里不能这样直接转bitset,否则会出错sad //b[m+1][i]的意义是:
//若使b[m+1][i]为0,则第一行的哪几个异或起来和为0
gauss();
D(i,n,){
c[][i]=a[i][n+];
if(!a[i][i]){c[][i]=; continue;}//令自由元为1(以保证矩阵不全为0)
F(j,i+,n) if (a[i][j]) c[][i]=c[][i]^c[][j];
}//解出第一行的0/1情况
F(i,,m)
F(j,,n)
c[i][j]=c[i-][j]^c[i-][j-]^c[i-][j+]^c[i-][j];
F(i,,m){
F(j,,n-) cout <<c[i][j]<<" ";
cout <<c[i][n]<<endl;
}
return ;
}
3503: [Cqoi2014]和谐矩阵
Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge
Submit: 484 Solved: 212
[Submit][Status][Discuss]
Description
我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1。一个元素相邻的元素包括它本
身,及他上下左右的4个元素(如果存在)。
给定矩阵的行数和列数,请计算并输出一个和谐的矩阵。注意:所有元素为0的矩阵是不允许的。
Input
输入一行,包含两个空格分隔的整数m和n,分别表示矩阵的行数和列数。
Output
输出包含m行,每行n个空格分隔整数(0或1),为所求矩阵。测试数据保证有解。
Sample Input
Sample Output
1110
0001
1101
数据范围
1 <=m, n <=40
HINT
Source
【BZOJ】【3503】【CQOI2014】和谐矩阵的更多相关文章
- BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...
- BZOJ 3503 [CQOI2014]和谐矩阵
题目链接 BZOJ 3503 题解 没想到--直接用暴力的\(O((nm)^3)\)算法,居然能过?! 高斯消元解异或方程组. #include <cstdio> #include < ...
- bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】
如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0 所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可 #include<iostream> #include ...
- 3503: [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 链接 分析: 对于每个点,可以列出一个方程a[i][j]=a[i][j-1]^a[i][j+1]^a[i-1][j]^a[i+1][j],于是可以列出n*m个 ...
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1197 Solved: ...
- BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元
BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...
- P3164 [CQOI2014]和谐矩阵
P3164 [CQOI2014]和谐矩阵 乱写能AC,暴力踩标程(雾 第一眼 诶这题能暴力枚举2333!!! 第二眼 诶这题能高斯消元!那只需要把每个位置的数给设出来就能够列方程了!然后就可以\(O( ...
- BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)
Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...
- Luogu3164 CQOI2014 和谐矩阵 异或高斯消元
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...
随机推荐
- CentOS 7下安装Python3.6和pip
一.安装python3.6 1.1.安装python3.6需要依赖包 yum install openssl-devel bzip2-devel expat-devel gdbm-devel read ...
- Cygwin镜像使用
前言:Cygwin是一个在windows平台上运行的类UNIX模拟环境,可以自己安装想用的插件 Cygwin镜像使用帮助 收录架构 x86 x86_64 收录版本 所有版本 更新时间 每12小时更新一 ...
- 安卓webview断网处理
需求:webview在加载的时候如果网络断开,会显示默认的错误界面,长得很丑,需要单独写一个页面,在网路出错的时候显示,点击重试以后重新加载网页 乍看挺简单的需求,但在实际过程中页碰到了不少坑,主要是 ...
- 牛客练习赛2 A - Contest
链接:https://www.nowcoder.com/acm/contest/4/A来源:牛客网 题目描述 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中 ...
- Socket 编程之 TCP 实现
前几天介绍了计算机网络的一些概念,并介绍了几个协议.下面就说说 Java 中的 Socket 编程,服务器和客户端是如何通信的呢? 首先要介绍一下 Socket ,我们知道在 TCP/IP 协议簇中, ...
- iOS系统中导航栏的转场解决方案与最佳实践
背景 目前,开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案,但对于历史包袱沉重的美团 App 而言,这些解决方案并不完美.有的方案不能满足复杂的页面跳转场景,有的方案迁移成本较大,为此我们 ...
- <泛> C++3D数学库设计详解 向量篇
// 注:本内容为作者原创,禁止在其他网站复述内容以及用于商业盈利,如需引用,请标明出处:http://www.cnblogs.com/lv_anchoret/ Preface 为了支持光线追踪的学习 ...
- leetcode easy problem set
*勿以浮沙筑高台* 持续更新........ 题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...
- HTTP 缓存之ETag 和Cache-Control的使用方法介绍
什么是http缓存,有什么作用 通过网络获取内容既速度缓慢又开销巨大.较大的响应需要在客户端与服务器之间进行多次往返通信,这会延迟浏览器获得和处理内容的时间,还会增加访问者的流量费用.因此,缓存并重复 ...
- [java] java中的初始化顺序
先看程序: package init_cls; class A{ {System.out.println("i am in the class A!");} static { Sy ...