首页 > 其他分享 >BZOJ 3503([Cqoi2014]和谐矩阵-gauss消元)

BZOJ 3503([Cqoi2014]和谐矩阵-gauss消元)

时间:2022-10-24 16:38:41浏览次数:49  
标签:ch int ll 3503 矩阵 gauss MAXN 消元 define


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

不难列出gauss Xor 方程组
但是有n*m个变量。
设答案为C,显然

ci,j=ci−1,j−1⊕ci−1,j⊕ci−1,j+1⊕ci−2,j

我们考虑当第一行确定时整个矩阵都能确定,因此只有去解关于第一行的方程就行了

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
int n,m;
#define
ll b[MAXN][MAXN]={};
ll c[MAXN][MAXN]={};
ll a[MAXN][MAXN]={};
void gauss(int m) {
For(i,m) {
int t=i;
while(t<=m && !a[t][i]) ++t;
if (t>m) continue;
For(j,m) swap(a[t][j],a[i][j]);
Fork(j,i+1,m) {
if (a[j][i]) Fork(k,i,m) a[j][k]^=a[i][k];
}
}
ForD(i,m) {
c[1][i]=(a[i][i])?(a[i][m+1]):1;
if(c[1][i]){
ForD(j,i-1) {
if(a[j][i]) {
a[j][m+1]^=1;a[j][i]^=1;
}
}
}
}
}
int main()
{
// freopen("bzoj3503.in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m;
For(i,m) b[1][i]=1LL<<i-1;
Fork(i,2,n+1) For(j,m) {
b[i][j]=b[i-1][j-1]^b[i-1][j]^b[i-1][j+1]^b[i-2][j];
}
For(i,m) For(j,m) {
a[i][j]=((ll)b[n+1][i]>>(ll)j-1)&1LL;
}
gauss(m);
Fork(i,2,n+1) For(j,m) {
c[i][j]=c[i-1][j-1]^c[i-1][j]^c[i-1][j+1]^c[i-2][j];
}
For(i,n){
For(j,m-1) printf("%lld ",c[i][j]);printf("%lld\n",c[i][m]);
}

return 0;
}


标签:ch,int,ll,3503,矩阵,gauss,MAXN,消元,define
From: https://blog.51cto.com/u_15724837/5790204

相关文章

  • 华为云数据库 GaussDB(for MySQL),让企业无忧数据恢复
    可能很多网络运营单位在数字化转型过程中都遇见过因为停电导致信息数据丢失,进而致使整个网络运营单位的云上业务被迫中断这样的问题?这时候网络运营单位需要探索到业务中断......
  • 【openGauss】运维常用的SQL
    一、查模式二、查对象查看某模式下的表名selecttablenamefrompg_tableswhereschemaname='hsjc_bi';查看某表的字段SELECTA.attnameASNAME,format_t......
  • 国货当自强,华为云数据库GaussDB(for MySQL)的崛起
    企业数据经过长时间的累积下,传统数据库已经进入性能和容量瓶颈,如计算资源的浪费、存储资源的浪费、网络资源的浪费、添加只读的进程缓慢、复制延迟、备份恢复速度慢等等,这些......
  • 国货之光,华为云数据库GaussDB(for MySQL)
    随着互联网的普及,数据上云已经成为一种常态,从而催生出数据库行业的急速发展。云数据库作为一个新的概念,它是通过虚拟化技术将计算机与其他设备进行连接并存储和处理大量信息......
  • 华为PB级时序数据库Gauss DB,助力海量数据处理
    近年来,时序数据的应用更为广泛,包括物联网、金融领域、监控领域、医学领域、农业生产领域等各方面,都在大量使用时序数据,通过数据来研究对象的趋势性、规律性、异常性;并且在5......
  • luogu P3232 [HNOI2013]游走 (期望, 高斯消元)
    https://www.luogu.com.cn/problem/P3232思路:算出每条边的期望访问次数,将期望访问次数多的赋予小的编号。一条边的期望访问次数=访问点u的期望/u的度+访问点v的期望......
  • 华为再出新品:GaussDB(for Influx)数据库的魅力了解一下
    华为再出新品:GaussDB(forInflux)数据库的魅力了解一下​华为自用的GaussDB(forInflux)数据库逐渐深入大众视野,到底值不值得期待?​时序数据库想必大家都有所耳闻,现在在很......
  • the random noise and the gaussian noise
          ifuse_noise=="randomnoise":                noise=(                    torch.randn_like(torch.Tens......
  • CF963E Circles of Waiting(高斯消元,主元法)
    CF963ECirclesofWaiting平面直角坐标系上有一个点,开始在\((0,0)\),每秒钟这个点都会随机移动:如果它在\((x,y)\),下一秒它去\(4\)个方向的概率为\(p_0,p_1,p_2,......
  • 云图说丨带你了解GaussDB(for Redis)双活解决方案
    摘要:GaussDB(forRedis)推出了双活解决方案,基于GaussDBNoSQL统一架构,通过两个数据库实例之间的数据同步,达成数据的一致性。本文分享自华为云社区《【云图说】一张图了解G......