E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)
题:https://codeforces.com/contest/1262/problem/E
分析:预处理出阵列中的矩阵,然后二分答案还原题目的烧火过程,判断是否满足要求
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
const int M=1e6+;
int main(){
int n,m;
ios::sync_with_stdio(false),cin.tie(),cout.tie();
cin>>n>>m;
vector<string>a(n);
vector<vector<int>> b(n,vector<int>(m)); for(int i=;i<n;i++)
cin>>a[i];
///找出矩阵
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(a[i][j]=='.') b[i][j]=;
else if(i== || j==) b[i][j]=;
else b[i][j]=min(b[i-][j-],min(b[i-][j],b[i][j-]))+;
int l=,r=1e6;
vector<vector<int>> c(n,vector<int>(m));
while(r-l>)
{
int mid=(l+r) >> ;
int x=*mid+;
bool flag=true;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(b[i][j]>=x) c[i][j]=x;
else c[i][j]=;
///还原矩阵
for(int i=n-;i>=;i--)
for(int j=m-;j>=;j--)
{
if(i>) c[i-][j]=max(c[i-][j],c[i][j]-);
if(j>) c[i][j-]=max(c[i][j-],c[i][j]-);
if(i> && j>) c[i-][j-]=max(c[i-][j-],c[i][j]-);
}
///与原图进行判断 for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
if(b[i][j]==) continue;
if(c[i][j]==) flag=false;
}
if(flag) l=mid;
else r=mid;
}
cout<<l<<endl;
int x=*l+;
vector<string> ans(n,string(m,'.'));
for(int i=;i<n;i++)
for(int j=;j<m;j++){
if(b[i][j]>=x){
ans[i-l][j-l]='X';
}
}
for(int i=;i<n;i++){
cout<<ans[i]<<'\n';
} return ;
}
E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)的更多相关文章
- C#实现找二维数组中的鞍点
鞍点定义:该位置上的元素值在行中最大,在该列上最小 代码示例: using System; using System.Collections.Generic; using System.Linq; u ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest
E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest 二分 前缀和
E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...
- C#编写程序,找一找一个二维数组中的鞍点
编写程序,找一找一个二维数组中的鞍点(即该位置上的元素值在行中最大,在该列上最小.有可能数组没有鞍点).要求: 1.二维数组的大小.数组元素的值在运行时输入: 2.程序有友好的提示信息. 代码: us ...
- 剑指 Offer 04. 二维数组中的查找 (思维)
剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...
- poj 2155:Matrix(二维线段树,矩阵取反,好题)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17880 Accepted: 6709 Descripti ...
- poj 1195:Mobile phones(二维线段树,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14391 Accepted: 6685 De ...
- 剑指Offer:面试题3——二维数组中的查找(java实现)
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...
随机推荐
- 大数据高可用集群环境安装与配置(04)——安装JAVA运行环境
Hadoop运行在java环境,所以在安装Hadoop之前,需要安装好jdk 提前下载好jdk安装包(jdk-8u161-linux-x64.tar.gz),将它上传到指定的安装目录当中,然后运行安装 ...
- 在Mac上使用docker+sql server+Navicat
1. 版本: 2. 安装Kubernetes(并不知道安装这个有什么用) git clone https://github.com/maguowei/k8s-docker-desktop-for-m ...
- Failed to connect to raw.githubusercontent.com port 443: Connection refused
问题:macOS安装Homebrew时总是报错(Failed to connect to raw.githubusercontent.com port 443: Connection refused) ...
- 翻翻棋(找规律问题)(FZU Problem 2230)
题目是这样的: FZU Problem 2230 象棋翻翻棋(暗棋)中双方在4*8的格子中交战,有时候最后会只剩下帅和将.根据暗棋的规则,棋子只能上下左右移动,且相同的级别下,主动移动到地方棋子方将吃 ...
- C# 基本元素
一.构成C#的基本元素 注释和空白编译器不会编译,自动忽略:而标记是可以通过编译器编译的. 关键字 (keyword) 官方定义:关键字是类似标识符的保留的字符序列,不能用作标识符(以 @ 字符开头时 ...
- 日志处理中一些shell命令技巧
日志处理中一些shell命令技巧 阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志.总结一下. 日志文件的输入是动则几个G的文本.从N个这样的文件中得到一个列表, ...
- python一个正则表达式的不解
htmlSource="data-lazy=\"http://gtms01.alicdn.com/tps/i1/T1faOCFQXXXXc2jIrl-.png\"&quo ...
- Spring中的控制反转和依赖注入
Spring中的控制反转和依赖注入 原文链接:https://www.cnblogs.com/xxzhuang/p/5948902.html 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...
- mysql比较运算,逻辑运算,范围查询,模糊查询
比较运算 > < = != <> <= >= 逻辑运算 and or not 范围查询 in 模糊查询 like ...
- Git 报错:fatal: refusing to merge unrelated histories
背景:[接上篇git push 出错的随笔]当 pull 远端仓库到本地的时候,出现以下错误: 错误情况: 出错原因:主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库,假如我之前是直接以 cl ...