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=0;bool fla=0;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-'){fla=1;ch=getchar();}while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}return fla?-ret:ret;
}int n,m,cnt,pos[maxn];
int tx[4]={1,0,0,-1};
int ty[4]={0,1,-1,0};
bitset<maxn> a[maxn];il int gi(int x,int y){return (x-1)*m+y;}void gauss()
{int now=0;for(int i=1;i<=n*m;++i){int j=now+1;while(!a[j][i]&&j<=n*m) j++;now++;swap(a[j],a[now]);for(int k=1;k<=n*m;++k)if(a[k][i]&&k!=now) a[k]^=a[now];}
}int main()
{n=read(),m=read();for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){a[gi(i,j)][gi(i,j)]=1;cnt=1;for(int k=0;k<4;++k){int x=i+tx[k],y=j+ty[k];if(x<=0||y<=0||x>n||y>m) continue ;a[gi(i,j)][gi(x,y)]=1;cnt++;}a[gi(i,j)][n*m+1]=(cnt&1);}gauss();for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)printf("%d%c",a[gi(i,j)][n*m+1]==0?1:0,j==m?'\n':' ');return 0;
}

补充:实数域的高斯消元

//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=0;bool fla=0;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-'){fla=1;ch=getchar();}while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}return fla?-ret:ret;
}int n,m,du[maxn],ed[maxn*maxn/2][2];
db ans,a[maxn][maxn],v[maxn],val[maxn*maxn/2];bool cmp(db x,db y){return x>y;}void gauss()
{for(int i=1;i<=n;++i){int j=i;for(int k=i+1;k<=n;++k) if(fabs(a[k][i])>fabs(a[j][i])) j=k;if(i!=j) for(int k=i;k<=n+1;++k) swap(a[i][k],a[j][k]);for(int k=i+1;k<=n;++k){db p=a[k][i]/a[i][i];for(int t=i;t<=n+1;++t) a[k][t]-=a[i][t]*p;}}for(int i=n;i;i--){for(int j=i+1;j<=n;++j) a[i][n+1]-=a[i][j]*v[j];v[i]=a[i][n+1]/a[i][i];}
}int main()
{n=read(),m=read();for(int i=1;i<=m;++i){ed[i][0]=read(),ed[i][1]=read();du[ed[i][0]]++;du[ed[i][1]]++;}for(int i=1;i<=m;++i){a[ed[i][0]][ed[i][1]]=1.0/du[ed[i][1]];a[ed[i][1]][ed[i][0]]=1.0/du[ed[i][0]];}for(int i=1;i<n;++i) a[i][i]=-1.0;for(int i=1;i<=n;++i) a[n][i]=0;a[n][n]=1;a[1][n+1]=-1.0;gauss();for(int i=1;i<=m;++i) val[i]=v[ed[i][0]]/du[ed[i][0]]+v[ed[i][1]]/du[ed[i][1]];sort(val+1,val+m+1,cmp);for(int i=1;i<=m;++i) ans+=1.0*val[i]*i;printf("%.3lf",ans);return 0;
}

转载于:https://www.cnblogs.com/rir1715/p/8581298.html

【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵相关推荐

  1. bzoj3503: [Cqoi2014]和谐矩阵

    高斯消元解异或方程组.学了bitset.对比如下 #include<cstdio> #include<cstring> #include<iostream> #in ...

  2. 计算矩阵的逆和行列式的值(高斯消元+LU分解)

    计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起,通过行操作(或者列操作)将A变为单位矩阵,这个时候单位矩阵就是矩阵A的逆矩阵.从上到下将A变为上三角矩阵的复杂度为O(n ...

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

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

  4. 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组

    #include <stdio.h> int main() {puts("转载请注明出处");puts("地址:blog.csdn.net/vmurder/a ...

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

    3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 1101  Solved ...

  6. 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)

    大佬1博客:https://www.cnblogs.com/zj75211/p/8039443.html 大佬2博客:https://www.cnblogs.com/yangsongyi/p/1069 ...

  7. CF446D-DZY Loves Games【高斯消元,矩阵乘法】

    正题 题目链接:https://www.luogu.com.cn/problem/CF446D 题目大意 给出nnn个点mmm条边的一张无向图,一些点有陷阱,走到时会损失一条生命,总共有kkk条生命, ...

  8. BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1778 炸弹从1出发,有\(\frac{P}{Q}\)的概率爆炸,如果不爆炸,等概率移动到连通的 ...

  9. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  10. Covering(dfs打表+高斯消元+矩阵快速幂)

    传送门 这是个递推题,可以看下维基的各种解释:传送门 假设递推式是一个四元方程,至于为什么也不大清楚(可能是操场是4*n的缘故) 然后得到递推式f(n)=f(n-1)+5*f(n-2)+f(n-3)- ...

最新文章

  1. 关于form/input 的autocomplete=off属性
  2. 性能计数器取网卡流量
  3. ABAP/4 Open SQL
  4. 64位浮点数_JavaScript 浮点数运算的精度问题
  5. 智能写作全景介绍:从最新前沿技术到行业落地解析
  6. MySQL幻读及解决方法
  7. 逆序创建链表及链表反转和中间位置反转
  8. Archlive新年第一棒: 基于2.6.37稳定内核的archlive20110107
  9. java基础总结(1)安装jdk
  10. Python爬虫之小米应用商店
  11. 8Manage革新多项目管理的沟通方式
  12. Single-page app(SPA)
  13. 基于jQuery动画二级下拉导航菜单
  14. linux 解压 WinRAR 压缩文件
  15. vue uniapp如何实现横向滚动周历,横向滚动一周日历
  16. 安卓手机多开助手v1.2 BY im大朋友
  17. 大数据,云计算和物联网,三者之间的关系是什么?
  18. 深入理解TTL 与 CMOS 电路
  19. pandas 学习task08文本数据
  20. Android Camera对焦相关基础自动对焦,手动对焦

热门文章

  1. Security+ 学习笔记1 恶意软件
  2. MPLS virtual private network 本地互访实验(华为设备)
  3. WLAN概述——无线网络简介
  4. Springboot -- 由于jar版本不匹配遇到的问题
  5. 11gR2rac的两个bug
  6. 安防行业相关标准、法律及规划一览
  7. Tornado部署时那些奇怪的错误
  8. PowerDesigner(四)-业务处理模型(转)
  9. BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
  10. 网络编程中sockaddr和sockaddr_in的区别(socket)