3503: [Cqoi2014]和谐矩阵

Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge
Submit: 1197  Solved: 570
[Submit][Status][Discuss]

Description

我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1。一个元素相邻的元素包括它本
身,及他上下左右的4个元素(如果存在)。
给定矩阵的行数和列数,请计算并输出一个和谐的矩阵。注意:所有元素为0的矩阵是不允许的。

Input

输入一行,包含两个空格分隔的整数m和n,分别表示矩阵的行数和列数。

Output

输出包含m行,每行n个空格分隔整数(0或1),为所求矩阵。测试数据保证有解。

Sample Input

4 4

Sample Output

0 1 0 0
1 1 1 0
0 0 0 1
1 1 0 1

数据范围
1 <=m, n <=40

题解

高斯消元解异或方程组

将第一行的未知数设成xi

则可以推出其他行和xi的关系

解方程组即可

代码

//by 减维
#include<set>
#include<map>
#include<queue>
#include<ctime>
#include<cmath>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define il inline
#define rg register
#define db double
#define mpr make_pair
#define maxn 2005
#define inf (1<<30)
#define eps 1e-8
#define pi 3.1415926535897932384626L
using namespace std; inline int read()
{
int ret=;bool fla=;char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-'){fla=;ch=getchar();}
while(ch>=''&&ch<=''){ret=ret*+ch-'';ch=getchar();}
return fla?-ret:ret;
} int n,m,cnt,pos[maxn];
int tx[]={,,,-};
int ty[]={,,-,};
bitset<maxn> a[maxn]; il int gi(int x,int y){return (x-)*m+y;} void gauss()
{
int now=;
for(int i=;i<=n*m;++i)
{
int j=now+;
while(!a[j][i]&&j<=n*m) j++;
now++;
swap(a[j],a[now]);
for(int k=;k<=n*m;++k)
if(a[k][i]&&k!=now) a[k]^=a[now];
}
} int main()
{
n=read(),m=read();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
{
a[gi(i,j)][gi(i,j)]=;cnt=;
for(int k=;k<;++k)
{
int x=i+tx[k],y=j+ty[k];
if(x<=||y<=||x>n||y>m) continue ;
a[gi(i,j)][gi(x,y)]=;cnt++;
}
a[gi(i,j)][n*m+]=(cnt&);
}
gauss();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
printf("%d%c",a[gi(i,j)][n*m+]==?:,j==m?'\n':' ');
return ;
}

补充:实数域的高斯消元

//by 减维
#include<set>
#include<map>
#include<queue>
#include<ctime>
#include<cmath>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define il inline
#define rg register
#define db double
#define mpr make_pair
#define maxn 505
#define inf (1<<30)
#define eps 1e-5
#define pi 3.1415926535897932384626L
using namespace std; inline int read()
{
int ret=;bool fla=;char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-'){fla=;ch=getchar();}
while(ch>=''&&ch<=''){ret=ret*+ch-'';ch=getchar();}
return fla?-ret:ret;
} int n,m,du[maxn],ed[maxn*maxn/][];
db ans,a[maxn][maxn],v[maxn],val[maxn*maxn/]; bool cmp(db x,db y){return x>y;} void gauss()
{
for(int i=;i<=n;++i)
{
int j=i;
for(int k=i+;k<=n;++k) if(fabs(a[k][i])>fabs(a[j][i])) j=k;
if(i!=j) for(int k=i;k<=n+;++k) swap(a[i][k],a[j][k]);
for(int k=i+;k<=n;++k)
{
db p=a[k][i]/a[i][i];
for(int t=i;t<=n+;++t) a[k][t]-=a[i][t]*p;
}
}
for(int i=n;i;i--)
{
for(int j=i+;j<=n;++j) a[i][n+]-=a[i][j]*v[j];
v[i]=a[i][n+]/a[i][i];
}
} int main()
{
n=read(),m=read();
for(int i=;i<=m;++i)
{
ed[i][]=read(),ed[i][]=read();
du[ed[i][]]++;du[ed[i][]]++;
}
for(int i=;i<=m;++i)
{
a[ed[i][]][ed[i][]]=1.0/du[ed[i][]];
a[ed[i][]][ed[i][]]=1.0/du[ed[i][]];
}
for(int i=;i<n;++i) a[i][i]=-1.0;
for(int i=;i<=n;++i) a[n][i]=;
a[n][n]=;a[][n+]=-1.0;
gauss();
for(int i=;i<=m;++i) val[i]=v[ed[i][]]/du[ed[i][]]+v[ed[i][]]/du[ed[i][]];
sort(val+,val+m+,cmp);
for(int i=;i<=m;++i) ans+=1.0*val[i]*i;
printf("%.3lf",ans);
return ;
}

【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵的更多相关文章

  1. BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)

    Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...

  2. bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...

  3. BZOJ3503: [Cqoi2014]和谐矩阵

    题解: 如果第一行的数知道了,我们就可以推出其他行的数. 那么如何判断第一行的数的一种填法是否合法呢?很简单,我们递推出m+1行的数,当且仅当这一行都是0时满足题意. 那么,我们就有了一种想法. 直接 ...

  4. BZOJ1770:[USACO]lights 燈(高斯消元,DFS)

    Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...

  5. 2017湘潭赛 A题 Determinant (高斯消元取模)

    链接 http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 今年湘潭的A题 题意不难 大意是把n*(n+1)矩阵去掉某一列 ...

  6. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

  7. BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元

    BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...

  8. Luogu3164 CQOI2014 和谐矩阵 异或高斯消元

    传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...

  9. bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】

    如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0 所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可 #include<iostream> #include ...

随机推荐

  1. springmvc+mybatis+mysql 数据库插入中文是乱码

    java web项目,前台页面的表单数据,插入到数据库时,结果出现乱码"???"的问题,断断续续折腾了一天时间,废话不说,步骤如下: 一:在web.xml中配置:编码格式拦截器 & ...

  2. Windows API Finishing

    input { font-size: 14px; height: 26px } td { border-style: none; border-color: inherit; border-width ...

  3. APP性能测试(启动时间)

    #encoding:utf-8 import csv import os import time class App(object): def __init__(self): self.content ...

  4. ActiveMq笔记3-AMQ高可用性理论

    单点的ActiveMQ作为企业应用无法满足高可用和集群的需求,所以ActiveMQ提供了master-slave.broker cluster等多种部署方式,但通过分析多种部署方式之后我认为需要将两种 ...

  5. SpringMVC的标签库

            Spring2.0版本开始后,提供了一组功能强大的标签用来在JSP和SpringWebMVC中处理表单元素 ,可以用来访问控制器处理命令对象和绑定数据:         以下是表单标签 ...

  6. plx9030触发pci中断

    if(((SWAB_16(PLX_INT(0x4C)))&0x04)==0x04) { ErrNo = *(UINT16*)(g_MemBase+0XFFFE*2); /*logMsg(&qu ...

  7. eviews 9.5新版本——平均预测、面板效应检验

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.界面优化 eviews9.5 更友好,可以 ...

  8. 《实战Nginx》读书笔记

    最近今天读了一本书叫做<实战Nginx:取代Apache的高性能Web服务器>,看后对Nginx 了解了不少.但是还有很多地方不是很了解.不过此书可以作为一本参考手册来使用,里面的讲解很详 ...

  9. zTree实现地市县三级级联封装类

    zTree实现地市县三级级联封装类 Province.java: /** * @Title:Province.java * @Package:com.gwtjs.model * @Descriptio ...

  10. freemarker报错之十四

    1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...