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

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

大家好,又见面了,我是你们的朋友全栈君。

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

Solution

咋感觉我写了三个高斯消元的题三个板子都长得不一样
讲真这个题不知道比1770那个题低到哪里去了(其实差不多)
会做那个题一定会做这个【认真脸
很明显这个还是构造01矩阵然后解异或方程组
只不过这个构造出来的矩阵是n*m的,n^3显然很吃力
那么我们把1770代码里的异或用bitset来搞常数就小很多了
听说bitset随便虐1e9?

Code

 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<bitset> 5 #define N (1600+100) 6 #define id(x,y) (x-1)*m+y 7 using namespace std; 8  9 bitset<N>f[N];10 int ans[N],n,m;11 int dx[7]={        0,1,-1,0,0,0},dy[6]={        0,0,0,1,-1,0};12 13 void Gauss(int n)14 {15     for (int i=1; i<=n; ++i)16     {17         int num=i;18         for (int j=i+1; j<=n; ++j)19             if (f[j][i]>f[num][i]) num=j;20         if (num!=i) swap(f[i],f[num]);21         22         for (int j=i+1; j<=n; ++j)23             if (f[j][i]) f[j]^=f[i];//这里用bitset来搞常数好像很小 24     }25     for (int i=n; i>=1; --i)26     {27         if (!f[i][i]) ans[i]=1;28         else29         {30             for (int j=i+1; j<=n; ++j)31                 f[i][n+1]=f[i][n+1]^(f[i][j]*ans[j]);32             ans[i]=f[i][n+1];33         }34     }35 }36 37 int main()38 {39     scanf("%d%d",&n,&m);40     for (int i=1; i<=n; ++i)41         for (int j=1; j<=m; ++j)42             for (int k=1; k<=5; ++k)43             {44                 int x=i+dx[k],y=j+dy[k];45                 if (x>0 && x<=n && y>0 && y<=m)46                     f[id(i,j)][id(x,y)]=1;47             }48     Gauss(n*m);49     for (int i=1; i<=n; ++i)50     {51         for (int j=1; j<=m-1; ++j)52             printf("%d ",ans[id(i,j)]);53         printf("%d\n",ans[id(i,m)]);54     }55 }

转载于:https://www.cnblogs.com/refun/p/8953107.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107559.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]

    在线学习Java的几个网站,别再盲目学习java了![通俗易懂]LearnJava在线这是一个非常不错的学习Java的在线网站,纯免费。这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握Java编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。你可以根据目录进行练习,有基础部分和高级部分,首先有例子代码,告诉你需要注意的事项以及详细的讲解,旨在把你教会后再让你进行练习。下面就是练习部分,练习部分没有固定在底部边框,可以自由滑动,能够让你编写代码的同时能够查看示例代码详解

    2022年7月7日
  • 操作系统之——银行家算法C语言实现

    操作系统之——银行家算法C语言实现//银行家算法.cpp:定义控制台应用程序的入口点。//#include”stdafx.h”#include”string.h”#include”stdlib.h”#defineMAX_PROCESS10//进程数上限#defineMAX_RESOURCE_KIND10//资源种类上限#defineMAX_RESOURCE_NUM20 //每种资源可用

    2022年6月2日
  • JRE配置完整 tomcat闪退问题

    JRE配置完整 tomcat闪退问题如果你的JRE环境配置没有问题的话很有可能是你的Tomcat版本和jdk版本不相容导致的闪退 以我的电脑为例,我安装的是:当我解压安装Tomcat70.73的时候就出现了闪退的问题而当我下载最新的Tomcat9.0.13后就直接可以了至于闪退而不知道具体的问题的时候可以修改start.bat文件中的最后一行:“call"%EXECUTABLE%"start%CMD…

    2022年5月30日
  • PHP多进程 基于Redis实现轻量级延迟队列[通俗易懂]

    PHP多进程 基于Redis实现轻量级延迟队列

    2022年2月12日
  • Python上位机软件图形界面实战(2)[通俗易懂]

    Python上位机软件图形界面实战(2)[通俗易懂]前言上位机图形界面开发设计用QTDesigner就可以了。但是qtdesigner生成的是.ui文件,我们需要将.ui转换为我们用的py文件。这里就要用到昨天设置Pyuic来生成。由于只是初步开发所以设计的界面没有美化,只是体验一下功能就可以了。1Pyuic的修改今天做的时候才发现昨天的Pyuic没设置好。下来在昨天的基础上只修改这两行。-mPyQt5.uic.pyuic$F…

    2022年5月29日
  • 全国职称计算机考试取消了吗,全国职称计算机考试取消必考模块 考生自选[通俗易懂]

    全国职称计算机考试取消了吗,全国职称计算机考试取消必考模块 考生自选[通俗易懂]全国职称计算机考试不再设必考模块,考生可选择自己擅长的模块进行考试。本月起,鞍山专业技术人员计算机应用能力考试系统将进行升级。调整后的题库中共有20个考试模块供考生选择报考。此前,职称计算机考试要设一个必考模块,调整后取消必考项目,考生可自主选择两个模块作为应考模块。据介绍,调整后的20个模块分别为:中文WindowsXP操作系统、Word2003中文字处理、Excel2003中文电子表格、Pow…

    2022年6月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号