第十四周作业-必做2

2023-05-16

题目描述:
Q老师 得到一张 n 行 m 列的网格图,上面每一个格子要么是白色的要么是黑色的。

Q老师认为失去了 十字叉 的网格图莫得灵魂. 一个十字叉可以用一个数对 x 和 y 来表示, 其中 1 ≤ x ≤ n 并且 1 ≤ y ≤ m, 满足在第 x 行中的所有格子以及在第 y 列的 所有格子都是黑色的

例如下面这5个网格图里都包含十字叉

在这里插入图片描述
第四个图有四个十字叉,分别在 (1, 3), (1, 5), (3, 3) 和 (3, 5).

下面的图里没有十字叉

在这里插入图片描述
Q老师 得到了一桶黑颜料,他想为这个网格图注入灵魂。 Q老师 每分钟可以选择一个白色的格子并且把它涂黑。现在他想知道要完成这个工作,最少需要几分钟?

Input
第一行包含一个整数 q (1 ≤ q ≤ 5 * 10^4) — 表示测试组数

对于每组数据:
第一行有两个整数 n 和 m (1 ≤ n, m ≤ 5 * 10^4, n * m ≤ 4 * 10^5) — 表示网格图的行数和列数

接下来的 n 行中每一行包含 m 个字符 — ‘.’ 表示这个格子是白色的, ‘*’ 表示这个格子是黑色的

保证 q 组数据中 n 的总和不超过 5 * 10^4, n*m 的总和不超过 4 * 10^5

Output
答案输出 q 行, 第 i 行包含一个整数 — 表示第 i 组数据的答案

Example
Input
在这里插入图片描述
在这里插入图片描述
Output
0
0
0
0
0
4
1
1
2
题目分析:
本题的数据非常大,所以靠扫描一遍是不行的,而且还有个问题就是数组范围太大了,本地编译器都抛出warning,但是他的个数(n*m)是比较小的,也就是说输入的样例可能是横坐标小纵坐标大的数组或者横坐标大纵坐标小的数组,这样也就意味着并不需要预留那么大的数组空间,所以我们就需要压缩,把二维数组压缩为一维数组,这样空间复杂度瞬间下降。

char a[400010]={0};

这样我们按照行进行压缩,输入的时候一行一行的输入,然后进行一行的偏移,这里就体现scanf的好处了,因为他输入的时候要带着地址,而数组符号刚好就是起始地址,所以加上偏移量就是偏移地址了。

		for(int i=0;i<n;i++)
		{
			scanf("%s",a+i*m);
		}

然后他要找的是需要填充多少,而不是具体填充哪里。这样就意味着既然不能一个一个扫描,那就扫描行和列,记录下每行每列有多少个白格子毕竟填充就是看哪一行哪一列白格子少。当然这里扫描的时候注意偏移量,扫描列就从im到(i+1)m,这就是一样中m个数,扫描列的时候从i(注意不是1,别看错了)到nm,每次前进m个单位。

		for(int i=0;i<n;i++)
		{
			row[i]=0;
			for(int j=i*m;j<(i+1)*m;j++)
			{
				if(a[j]=='.')
				{
					row[i]++;
				}
			}
		}
		for(int i=0;i<m;i++)
		{
			col[i]=0;
			for(int j=i;j<n*m;j=j+m)
			{
				if(a[j]=='.')
				{
					col[i]++;
				}
			}
		}

然后就是看谁的白格子少了,当然这里要考虑特殊情况,就是一行+一列的时候可能交叉点重复计算,所以如果交叉点也是白格子就要把重复的删掉。

		int ans=1919810;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				int sum=col[j]+row[i];
				if(a[i*m+j]=='.')
				{
					sum--;
				}
				ans=min(ans,sum);
			}
		}

代码如下:

#include<iostream>
using namespace std;
char a[400010]={0};
int row[400010]={0};
int col[400010]={0};
int main()
{
	int q;
	cin>>q;
	while(q--)
	{
		int n,m;
		cin>>n>>m;
		for(int i=0;i<n;i++)
		{
			scanf("%s",a+i*m);
		}
		for(int i=0;i<n;i++)
		{
			row[i]=0;
			for(int j=i*m;j<(i+1)*m;j++)
			{
				if(a[j]=='.')
				{
					row[i]++;
				}
			}
		}
		for(int i=0;i<m;i++)
		{
			col[i]=0;
			for(int j=i;j<n*m;j=j+m)
			{
				if(a[j]=='.')
				{
					col[i]++;
				}
			}
		}
		int ans=1919810;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				int sum=col[j]+row[i];
				if(a[i*m+j]=='.')
				{
					sum--;
				}
				ans=min(ans,sum);
			}
		}
		cout<<ans<<endl;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第十四周作业-必做2 的相关文章

  • vue开发实例

    1 利用三元表达式实现对元素样式动态赋值 2 vue中 实现点击下载图片
  • Elementui 踩过的坑

    select下拉框 这个是Elementui 官网 Select选择器的基础用法 xff0c 现在想要更改它本身自带的默认样式 lt template gt lt el select v model 61 34 value 34 place
  • WSL2图形化界面踩坑记录

    问题 xff1a 启动xfce4时 xff0c 报错 xff1a xfsm manager load session Something wrong with home shenshiyi cache sessions xfce4 sess
  • CSP M1-A 咕咕东的奇遇

    题意 xff1a 字母a z首尾相接成环 xff0c 开始时指针指向a xff0c 圆环可以顺时针或者逆时针旋转 xff0c 给定一个字符串 xff0c 计算旋转依次得到该字符串的每一个字符最少需要转多少格 Input 一个字符串 长度 l
  • pycharm的python库在哪?pip下载的文件放在哪?一个方法,都能找到

    1 打开cmd命令行 2 标题输入pip install xxx库 xff08 1 xff09 如果没下载过 xff0c 那么将正常下载 xff08 2 xff09 若下载过了 xff0c 就会显示你下载的目录 这个目录 c users x
  • 数据库面试知识点

    1 事务及其四个特性 事务是用户定义的一个操作序列 xff0c 这些操作要么全做要么全不做 xff0c 是一个不可分割的工作单位 事务四个特性 xff1a 原子性 一致性 隔离性和持续性 原子性 xff1a 事物中包括的操作要么都做 xff
  • 第六次模拟测试-6

    题目描述 xff1a 石头剪刀布是常见的猜拳游戏 石头胜剪刀 xff0c 剪刀胜布 xff0c 布胜石头 如果两个人出拳一样 xff0c 则不分胜负 一天 xff0c 小A和小B正好在玩石头剪刀布 已知他们的出拳都是有周期性规律的 xff0
  • kali linux教程:配置 Kali 的 apt 命令在线安装包的源为阿里云

    配置 apt 国内源 因为 Kali 自带的源是国外的 xff0c 经常会因为网络问题 xff0c 而无法安装戒更新软件包 而且国外的源速度很慢 所以我们直接使用国内的源 xff0c 方便快速 点击终端按钮戒者右键桌面选择 open in
  • 相关分析和回归分析

    1 相关分析 相关分析是研究两个或两个以上处于同等地位的随机变量间的相关关系的统计分析方法 例如 xff0c 人的身高和体重之间 xff1b 空气中的相对湿度与降雨量之间的相关关系都是相关分析研究的问题 2 回归分析 相关分析与回归分析之间
  • Linux(Debian)下快速安装JDK

    Linux下快速安装JDK 一 前言 linux系统的debain发行版本 博主使用电脑mac 二 Linux系统下载jdk 1 下载JDK上传到linux系统 1 下载jdk版本到自己电脑上 JDK下载地址 下载JDK的Oracle账号
  • LINK1104 无法打开文件“libboost_atomic-vc142-mt-gd-x64-1_76.lib”

    问题描述 LNK1104 无法打开文件 libboost atomic vc142 mt gd x64 1 76 lib 可能原因 xff1a 相应的包没有安装 xff0c 可以再电脑上搜一下 xff0c 是否搜索到 xff0c 如果搜索到
  • Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException异常处理

    org springframework jdbc CannotGetJdbcConnectionException Could not get JDBC Connection nested exception is java sql SQL
  • s5p6818裸机-irq中断

    前言 本次学习的目的是通过按按键触发按键中断 xff0c 调用相关的中断服务函数 xff0c 实现蜂鸣器鸣响 通过裸机学习能使自己对SoC的运行环境 xff0c 开发环境有更好的了解 软件实现流程 1 xff09 在start S启动汇编中
  • linux——问题汇总记录

    1 安装安装包的时候 xff0c 遇见没有签名的错误 xff0c 错误内容如下 xff1a 正在验证 kylin software center 4 5 61kylin amd64 deb debsig Origin Signature c
  • 数据成功插入数据库,前端页面却实现404错误 POST http://127.0.0.1:8080/user/register 404 ()

    今天通过mui ajax向数据库传数据 xff0c 但是每次前端页面都会报错 xff0c 但是数据却成功传入数据库中 xff0c 昨晚上弄了很久最后终于解决 解决办法 xff1a 在后台controller里面的相关代码上加一个 64 Re
  • WebService案例实例

    WebService案例实例 前言 xff1a 由于工作需要 xff0c 写一个接口 xff0c 返回xml信息 供其他服务调用 最初使用python 43 flask框架 xff0c 能够返回出正确的xml信息 xff0c 似乎调用这个接
  • 在SolidWorks中装配使用标准件时,在打开后标准件不见了怎么办?

    项目场景 xff1a SolidWorks中含有许多的标准件 xff0c 有时候我们需要对这些标准件进行一定的修改才可以符合我们的需求 xff0c 但有时候出行一些问题 问题描述 xff1a 许多人在使用SolidWorks自带的工具箱中的
  • 第十三周作业-必做2

    题目描述 xff1a 在你们的帮助下 xff0c TT 轻松地完成了上一个神秘任务 但是令人没有想到的是 xff0c 几天后 xff0c TT 再次遇到了那个神秘人 而这一次 xff0c 神秘人决定加大难度 xff0c 并许诺 TT xff
  • 安装Math Type后,打开Word后没有找到怎么办?

    安装Math Type后 xff0c 打开Word后没有找到怎么办 xff1f 在成功安装Math Type后 xff0c 有时候打开Word后发现并未发现该插件 xff0c 这是因为相关文件并没有自动生成在相应的文件夹中 xff0c 需要
  • 运行VS时出现下面错误:general error c101008d: Failed to write the updated manifest to the resource of file

    使用VS写程序运行时出现下面错误 xff1a general error c101008d Failed to write the updated manifest to the resource of file 鎷掔粷璁块棶銆 mt ex

随机推荐

  • VS报错:fatal error LNK1104: 无法打开文件“ucrtd.lib”

    VS报错 xff1a fatal error LNK1104 无法打开文件 ucrtd lib 解决办法 问题描述解决办法 问题描述 在解决完fatal error LNK1104 无法打开文件 kernel32 lib 的问题后 xff0
  • Apache配置https,及多个https配置

    Apache配置https xff0c 及多个https配置 1 单个https配置 检查相关依赖 xff0c 如果没有就yum安装 yum install mod ssl openssl rpm qa grep mod ssl rpm q
  • CodeForces 1238-D AB-string

    题目 传送门 思路 因为字符串只有A和B两种字符 我们不妨研究一下符合条件的特点 对于一个字符串我们将相同的连续的分为一段 如果分成了三段 则可以构成 ABA 或者 BAB类的回文串 则三段以上都是成立的 如果分成了两段 xff0c 如果有
  • 2020 CCPC网络赛 - 1012 Xor

    题意 求 满 足 x 0 A
  • Gym - 102470C Lights

    Statement G i v e n v
  • go语言从零入门看项目(一):cache2go源码

    前言 刚了解完go语言基础 打算做一个关于阅读go语言优秀的开源项目的专题来学习go语言 介绍 项目地址 https github com muesli cache2go cache2go是一个比较简单的go语言项目 其主要实现了一个具有心
  • Gym - 101291I Mismatched Socks(贪心)

    题目 Fred likes to wear mismatched socks This sometimes means he has to plan ahead Suppose his sock drawer has 1 red 1 blu
  • CodeForces - 719A Vitya in the Countryside(暴力)

    题目 传送门 思路 因为数据范围很小 xff0c 我们可以直接暴力 xff0c 我们以30天每天都为起点去与所给序列比较 xff0c 如果存在一天为起点时整个序列都是符合的 xff0c 那么比较下一天和最后一天的大小就可以了 这里我们要加一
  • 第十三周作业-必做3

    题目描述 xff1a 在大家不辞辛劳的帮助下 xff0c TT 顺利地完成了所有的神秘任务 神秘人很高兴 xff0c 决定给 TT 一个奖励 xff0c 即白日做梦之捡猫咪游戏 捡猫咪游戏是这样的 xff0c 猫咪从天上往下掉 xff0c
  • CodeForces 1165-B Polycarp Training

    题目 传送门 思路 将所有比赛进项排序 对于 第k天 xff0c 我们从贪心的角度出发肯定要选最接近 k 题的 比赛 不能比k题小 这样的话第 k 1天所选比赛的题数小于等于 k 天 的比赛题数 xff0c 所以我们的这个方法的复杂度是线性
  • gym 102302 2019 USP-ICMC H-Log Concave Sequences (dp + 矩阵快速幂优化)

    题目 传送门 思路 我们可以先写出转移方程 xff0c 发现该方程是一个不变的递推式 我们考虑用矩阵快速幂来优化这个递推式 完结撒花 AC Code span class token macro property span class to
  • Maven配置打包的jar或者war文件到指定目录

    最近项目打包比较频繁 xff0c 而且使用maven打包之后生成的jar包文件的都在不同项目的根目录的target目录下 xff0c 项目发布时候来回拷贝 xff0c 着实蛋疼 xff0c 所以就考虑把所有的项目到集中打包到一个目录里面 x
  • windows远程桌面连接树莓派通过xrdp服务

    远程桌面协议 xff08 RDP xff09 是微软的专有协议 xff0c 它利用低带宽连接来提供对桌面的访问 为了允许在树莓派上使用RDP xff0c 我们将使用一个名为xrdp的软件 xrdp软件将你的屏幕和格式化为他们的RDP实现 在
  • windows下Anaconda更改默认python环境的方法

    windows Linux下Anaconda更改默认python环境的方法 更改anaconda安装目录下 anaconda3 Scripts activate bat文件 将第24行 span class token decorator
  • 文献管理软件Zotero常用插件安装及配置使用

    文献管理软件 Zotero常用插件安装及配置使用 一 Zotero安装与同步盘配置1 下载Zotero并安装2 配置Zotero xff08 1 xff09 配置同步盘 xff08 以onedrive为例 xff09 如果不配置同步盘 xf
  • Github本地仓库使用学习记录

    一 注册Github账号 在官网注册github的账号 xff1a https github com 二 下载git本地客户端并安装 Windows 三个平台下载地址 xff1a http git scm com downloads 国内的
  • Win10+GTX 1660 SUPER安装Cuda11.5.1+cudnn8.3.0

    Win10 43 GTX 1660 SUPER安装Cuda11 5 1 43 cudnn8 3 0 一 cuda11 5 1安装步骤1 查看电脑的显卡驱动2 下载显卡驱动3 下载需要的cuda版本 二 对应版本Cudnn安装1 注册nvid
  • python的列表数据写入excel表

    python的列表数据写入excel表 将python代码生成的一个列表数值导入到excel发现按照行列排列不能全部输出到excel表的一列当中 xff0c 查阅资料后发现可以用下面的函数进行写入 span class token keyw
  • 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)

    最新zotero与obsidian笔记联动教程 xff08 可代替citations和mdnotes xff09 一 联动原理二 插件配置1 zotero better bibtex2 Bibnotes Formatter3 MarkDBC
  • 第十四周作业-必做2

    题目描述 xff1a Q老师 得到一张 n 行 m 列的网格图 xff0c 上面每一个格子要么是白色的要么是黑色的 Q老师认为失去了 十字叉 的网格图莫得灵魂 一个十字叉可以用一个数对 x 和 y 来表示 其中 1 x n 并且 1 y m