CF1731D Valiant‘s New Map 题解

文章目录

  • CF1731D Valiant's New Map 题解
  • Valiant's New Map
    • 题面翻译
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 算法:二分+二维前缀和
    • 代码:

CF1731D Valiant’s New Map 题解

link

Valiant’s New Map

题面翻译

给定一个带权值的 n × m n×m n×m 网格,你可以选取一块边长为 l l l 的正方形区域当且仅当该区域的所有权值都大于等于 l l l,问可以选取的最大正方形区域的边长。

题目描述

Game studio “DbZ Games” wants to introduce another map in their popular game “Valiant”. This time, the map named “Panvel” will be based on the city of Mumbai.

Mumbai can be represented as n × m n \times m n×m cellular grid. Each cell ( i , j ) (i, j) (i,j) ( 1 ≤ i ≤ n 1 \le i \le n 1in ; 1 ≤ j ≤ m 1 \le j \le m 1jm ) of the grid is occupied by a cuboid building of height a i , j a_{i,j} ai,j .

This time, DbZ Games want to make a map that has perfect vertical gameplay. That’s why they want to choose an l × l l \times l l×l square inside Mumbai, such that each building inside the square has a height of at least l l l .

Can you help DbZ Games find such a square of the maximum possible size l l l ?

输入格式

Each test contains multiple test cases. The first line contains the number of test cases t t t ( 1 ≤ t ≤ 1000 1 \leq t \leq 1000 1t1000 ). Description of the test cases follows.

The first line of each test case contains two positive integers n n n and m m m ( 1 ≤ n ≤ m 1 \le n \le m 1nm ; 1 ≤ n ⋅ m ≤ 1 0 6 1 \leq n \cdot m \leq 10^6 1nm106 ).

The $ i $ -th of next n n n lines contains m m m integers a i , 1 , a i , 2 , … , a i , m a_{i,1}, a_{i,2}, \dots, a_{i,m} ai,1,ai,2,,ai,m ( 1 ≤ a i , j ≤ 1 0 6 1 \leq a_{i,j} \leq 10^6 1ai,j106 ) — heights of buildings on the i i i -th row.

It’s guaranteed that the sum of n ⋅ m n \cdot m nm over all test cases doesn’t exceed 1 0 6 10^6 106 .

输出格式

For each test case, print the maximum side length l l l of the square DbZ Games can choose.

样例 #1

样例输入 #1

4
2 2
2 3
4 5
1 3
1 2 3
2 3
4 4 3
2 1 4
5 6
1 9 4 6 5 8
10 9 5 8 11 6
24 42 32 8 11 1
23 1 9 69 13 3
13 22 60 12 14 17

样例输出 #1

2
1
1
3

提示

In the first test case, we can choose the square of side l = 2 l = 2 l=2 (i. e. the whole grid) since the heights of all buildings are greater than or equal to 2 2 2 .

In the second test case, we can only choose the side as 1 1 1 , so the answer is 1 1 1 .

In the third test case, there are no squares of size 2 2 2 that have all buildings of height at least 2 2 2 , so the answer is 1 1 1 .

算法:二分+二维前缀和

思路:用二维前缀和数组来存储是否符合条件。

考虑在一个矩阵中,如何计算从 ( 1 , 1 ) ( 1 , 1 ) (1,1) ( x , y ) ( x , y ) (x,y) 这一部分的和呢?可以用 f i , j f_{i,j} fi,j 表示从 ( 1 , 1 ) ( 1 , 1 ) (1,1) ( i , j ) ( i ,j ) (i,j) 的总和,则 f i , j ← f i − 1 , j + f i , j − 1 − f i − 1 , j − 1 + a i , j f_{i,j} \gets f_{i-1,j} + f_{i,j-1} - f_{i-1,j-1} + a_{i,j} fi,jfi1,j+fi,j1fi1,j1+ai,j,中间之所以要减去是因为重复计算了。

因为并不确定 n n n m m m 的值,所以要用 vector,注意要先动态开空间之后才能当作数组使用。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e6+10;
ll T,n,m,ans,t,l,r,mid;
vector<ll> a[N],f[N];
bool check(ll p){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]=a[i][j]<mid;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];for(int i=1;i+p<=n;i++)for(int j=1;j+p<=m;j++)if(!(f[i+p][j+p]+f[i-1][j-1]-f[i-1][j+p]-f[i+p][j-1]))return 1;return 0;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--){cin>>n>>m;f[0].clear();for(int i=0;i<=m;i++) f[0].push_back(0);		for(int i=1;i<=n;i++){a[i].clear();a[i].push_back(0);f[i].clear();f[i].push_back(0);for(int j=1;j<=m;j++){cin>>t;a[i].push_back(t);f[i].push_back(0);}}l=1,r=n;while(l<=r){mid=l+r>>1;if(check(mid-1)) l=mid+1,ans=mid;else r=mid-1;}cout<<ans<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adobe Ai下载安装免费(矢量图形编辑软件Ai安装包下载2024【Windows版】)

Adobe全家桶下载方式 Ae下载 Pr下载 Ai下载 将持续更新~ 文章目录 Adobe全家桶下载方式Ai下载方式【点我获取下载链接】我们的网站一、Ai简介二、链接内容包含1.Ai软件 声明 Ai下载方式【点我获取下载链接】 百度网盘下载&#xff1a;百度网盘下载方式夸克网盘下载&#xff…

Day 6.文件属性和权限的获取

时间获取 1.time time_t time(time_t *tloc); 功能&#xff1a; 返回1907-1-1到现在的秒数&#xff08;格林威治时间&#xff09; 参数&#xff1a; tloc&#xff1a;存放秒数空间的首地址 返回值&#xff1a; 成功返回秒数 失败返回-1 2.localtime struct tm *loca…

Python入门:常用模块—logging模块

logging日志的分级&#xff1a; debug(),info(),warning(),error(),critical() 5个级别 最简单用法 1 2 3 4 import logging logging.warning("user [mike] attempted wrong password more than 3 times") logging.critical("server is down") 输出&…

Day49 647 回文子串 516 最长回文子序列

647 回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 方法一&#xff1a;动态规划&#xff1a; 采用一个二维的dp数组&#xf…

普中51单片机学习(二)

51单片机介绍 所需基础知识 基础数模电知识&#xff0c;简单的C语言。 PS&#xff1a;如果有不懂的直接通义千问。。。 什么是单片机 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机。 学习方法 多实…

Sqoop 入门基础

简介 Sqoop&#xff08;SQL to Hadoop&#xff09;是一个开源工具&#xff0c;用于在关系型数据库和Hadoop之间传输数据。它提供了一种快速高效的方式&#xff0c;将数据从关系型数据库导入到Hadoop集群进行分析&#xff0c;并支持将Hadoop集群中的数据导出到关系型数据库中。本…

【编程】C++语言编程规范-2

编程实践 结合C Effective系列参考树、尤其是工程经验教训的总结。 并发 除非必要&#xff0c;尽量少用线程。多线程编程要守护好内存&#xff0c;使用atomic、mutex、condition variable、future、semaphore、latch、barrier等同步机制避免数据竞争。尽量缩小临界区&#x…

智慧社区管理系统:构建未来的生活模式

在这个信息化、智能化的时代&#xff0c;我们期待的不再是简单的居住空间&#xff0c;而是一个集安全、便捷、舒适、环保于一体的智能化社区。为此&#xff0c;我们推出了全新的智慧社区管理系统&#xff0c;旨在将先进的科技力量引入社区管理&#xff0c;为居民提供更优质的生…

OpenProject + Rocky8安装

文章目录 1、概要2、整体架构流程3、准备4、安装5、openproject 配置5.1、第一步&#xff1a;OpenProject 版本选择5.2、第二步&#xff1a;PostgreSQL 支持5.3、第三步&#xff1a;Apache2 Web 服务器支持5.4、第四步&#xff1a;hostname 支持5.5、 第五步&#xff1a;服务器…

从零学算法172

172.给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0 示例 2&#xff1a; 输入&#xff1a;n 5 输出&…

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一&#xff1a;Volume 命令操作方式二&#xff1a;-v 或者--mount 指定方式三&#xff1a;Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…

懒加载实践记录

1.原理 懒加载的原理是通过监听用户的浏览行为&#xff0c;当用户滚动到可视区域内时&#xff0c;再进行资源的加载。这样可以避免一次性加载过多的资源&#xff0c;从而减少页面的加载时间和带宽消耗。 2.主要使用场景 懒加载适用于图片较多&#xff0c;页面列表较长(长列表)…

Linux——常用特殊符号介绍

1、# 井号 (comments) 这几乎是个满场都有的符号&#xff0c;除了先前已经提过的"第一行" #!/bin/bash 井号也常出现在一行的开头&#xff0c;或者位于完整指令之后&#xff0c;这类情况表示符号后面的是注解文字&#xff0c;不会被执行。 # This line is comments.…

unity学习(32)——跳转到角色选择界面(父子类问题)

新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单&#xff0c;把ResceneScript也绑到canvas上就可以了 。 此时&#xff0c;在账号密码正确的情况下&#xff0c;是可以完成场景切换。 对应的代码如下&#xff1a; TMP_Text d GameObject.FindWithTag(&…

嵌入式Linux学习DAY20

文件io 文件io和标准io的区别&#xff1a; 1.标准io是库函数&#xff0c;是对系统调用的封装 2.文件io是系统的调用&#xff0c;是Linux内核中的函数接口 3.标准io是有缓存的 4.文件io是没有缓存的 操作步骤 打开->读写->关闭 打开文件&#xff1a;open 功能&am…

了解不同颜色油封的用途

在机械领域&#xff0c;油封是保证各种设备平稳运行的关键部件。为什么油封会有很多颜色。本文旨在阐明不同颜色油封的用途及其意义。 油封有多种颜色&#xff0c;包括黑色、棕色、绿色和蓝色等。乍一看&#xff0c;这些颜色似乎只是一种审美选择。然而&#xff0c;它们有更实…

接口测试(postman/jmeter)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&am…

Window部署Nacos

Nacos 现在压缩包解压后&#xff0c;修改conf/application.properties 文件 取消注释&#xff0c;修改mysql连接方式 节点nacos.core.auth.enabled 改成true 设置节点nacos.core.auth.server.identity.key、nacos.core.auth.server.identity.value 设置secret秘钥&#xff0c;…

十大常见web漏洞及防范

十大常见web漏洞 一、SQL注入漏洞 SQL注入攻击&#xff08;SQL Injection&#xff09;&#xff0c;简称注入攻击、SQL注入&#xff0c;被广泛用于非法获取网站控制权&#xff0c;是发生在应用程序的数据库层上的安全漏洞。在设计程序&#xff0c;忽略了对输入字符串中夹带的S…

javascript选择器大全

目录 1.getElementsByTagName 2.getElementsByName 3.getElementById 4.getElementsByClassName 5.querySelector 6.querySelectorAll 1.getElementsByTagName 俗称标签选择器&#xff0c;可以根据标签名查找匹配到页面的元素对象&#xff0c;返回为一个数组。 <div&…