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

题意:

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

分析:

考虑一种暴力,设n*m个未知数,列n*m个方程

高斯消元解方程,注意全零矩阵不合法

那我们如果发现有自由元就将它们置为1

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define p(x,y) ((x-1)*m+y)
int a[1700][1700];
int n,m;
int tx[]={-1,0,0,0,1};
int ty[]={0,-1,0,1,0};
int which[1700*1700],ins[1700*1700];
void build(){
    int i,j,k;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            for(k=0;k<5;k++){
                int dx=i+tx[k],dy=j+ty[k];
                if(dx>=1&&dx<=n&&dy>=1&&dy<=m){
                    a[p(i,j)][p(dx,dy)]=1;
                }
            }
        }
    }
}
void Guass(){
    int i=1,j=1,k,p;
    while(i<=n*m&&j<=n*m){
        for(k=i;k<=n*m;k++){
            if(a[k][j])break;
        }
        if(a[k][j]){
            if(k!=i){
                for(p=j;p<=n*m+1;p++){
                    swap(a[k][p],a[i][p]);
                }
            }
            for(k=i+1;k<=n*m;k++){
                if(a[k][j]){
                    for(p=j;p<=n*m+1;p++){
                        a[k][p]^=a[i][p];
                    }
                }
            }
            which[i]=j;
            ins[j]=i;
            i++;
        }
        j++;
    }
    if(i>n*m)return ;
    int id=i;
    for(k=1;k<=n*m;k++){
        if(!ins[k]){
            which[id]=k;
            ins[k]=id++;
        }
    }
    for(k=i;k<=n*m;k++){
        a[k][n*m+1]=1;
    }
    for(k=i-1;k;k--){
        for(p=which[k]+1;p<=n*m;p++){
            if(a[k][p]){
                a[k][n*m+1]^=a[ins[p]][n*m+1];
            }
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    build();
    Guass();
    int i,j;
    for(i=1;i<=n;i++){
        int f=0;
        for(j=1;j<=m;j++){
            if(!f)f=
            printf("%d",a[ins[p(i,j)]][n*m+1]);
        else printf(" %d",a[ins[p(i,j)]][n*m+1]);
        }
        puts("");
    }
}

原文地址:https://www.cnblogs.com/suika/p/8534226.html

时间: 2024-08-28 16:41:42

BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元的相关文章

HDU4870_Rating_双号从零单排_高斯消元求期望

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 654    Accepted Submission(s): 415 Special Judge Problem Description A little gir

矩阵算法 高斯消元 行列式 矩阵的秩

今天学习一下矩阵的基本算法 高斯消元是解线性方程组的有力工具. 基本思想是通过将增广矩阵经过行初等变化变成简化阶梯形矩阵. 下面采用的是列主元高斯消元法,复杂度为O(n^3). 很容易根据高斯消元法的过程得出行列式和秩的算法. 代码: /********************************************************* * ------------------ * * author AbyssalFish * ***************************

hdu4305Lightning 生成树计数(基尔霍夫矩阵)+高斯消元+逆元

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4305 题意:比较裸的生成树计数问题. 如何处理生成树计数问题? 基尔霍夫矩阵: if i==j  Kir[i][j] = i的度数 if i!=j   Kir[i][j] = i到j的平行边的个数的负数 即,基尔霍夫矩阵 = 度数矩阵 - 邻接矩阵 将基尔霍夫矩阵删去第i行和第i列,余下i-1阶的行列式的值即为生成树个数.(证明略) 求行列式的值可以将行列式转为上三角阵,求对角线上的积即为行列式的值.

【弱校胡策】2016.4.14 (bzoj2164)最短路+状压DP+矩阵乘法+高斯消元+树链剖分+线段树+背包DP

cyyz&qhyz&lwyz&gryz弱校胡策 命题人:cyyz ws_fqk T3暴力写挫了 50+10+0滚粗辣! 奇妙的约会(appointment.cpp/c/pas) [问题描述] DQS和sxb在网上结识后成为了非常好的朋友,并且都有着惊人 的OI水平.在NOI2333的比赛中,两人均拿到了金牌,并保送进入 HU/PKU.于是两人决定在这喜大普奔的时刻进行面基. NOI2333参赛选手众多,所以安排了n个考点,DQS在1号考点, 而sxb在n号考点.由于是举办全国性赛事

BZOJ_1013_[JSOI2008]_球形空间产生器_(高斯消元)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1013 n维空间,给出球上n+1个点的n维坐标,求球心坐标. 提示:给出两个定义:1. 球心:到球面上任意一点距离都相等的点.2. 距离:设两个n为空间上的点A, B 的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 ) 分析 对于前n个点,第i个点

hdu-5833 Zhu and 772002(高斯消元)

题目链接: Zhu and 772002 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1006    Accepted Submission(s): 348 Problem Description Zhu and 772002 are both good at math. One day, Zhu wants to test the

线性空间和异或空间(线性基)bzoj4004贪心+高斯消元

线性空间:是由一组基底构成的所有可以组成的向量空间 对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩 并且这i个主元线性无关 /* 每个向量有权值,求最小权极大线性无关组 本题是使用贪心策略的高斯消元 由输入给出的n个物品,每个物品有m种属性,和价格price 如果a物品的属性可以由其他已有物品的属性组合出,那么a可以不必购买 问最少花掉多少钱,使得所有物品都可以组合出 首先构建n*m矩阵,然后高斯消元 在求第i个主元时,取价格最小的那个即可 可用反证法证明 */

【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵

3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1197  Solved: 570[Submit][Status][Discuss] Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输出一个和谐的矩阵.注意:所有元素为0的矩

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

传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有$N \times M$的元.$N \times M$个方程的异或方程组(异或方程组就是所有位置都是$1$或$0$,最右边一列的答案需要通过异或互相消除的方程组,一般在$mod\,2$意义下产生). 理论上元和方程组数量一致的时候每一个元都是有唯一解的,但是在有解的情况下,其中一些方程是线性相关的,