题: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(思维,找二维阵列中的矩阵,二分)的更多相关文章

  1. C#实现找二维数组中的鞍点

    鞍点定义:该位置上的元素值在行中最大,在该列上最小 代码示例: using System; using System.Collections.Generic; using System.Linq; u ...

  2. 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 ...

  3. 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 ...

  4. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  5. C#编写程序,找一找一个二维数组中的鞍点

    编写程序,找一找一个二维数组中的鞍点(即该位置上的元素值在行中最大,在该列上最小.有可能数组没有鞍点).要求: 1.二维数组的大小.数组元素的值在运行时输入: 2.程序有友好的提示信息. 代码: us ...

  6. 剑指 Offer 04. 二维数组中的查找 (思维)

    剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...

  7. poj 2155:Matrix(二维线段树,矩阵取反,好题)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17880   Accepted: 6709 Descripti ...

  8. poj 1195:Mobile phones(二维线段树,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14391   Accepted: 6685 De ...

  9. 剑指Offer:面试题3——二维数组中的查找(java实现)

    问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...

随机推荐

  1. 【LeetCode】最长回文子串-动态规划法

    [问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...

  2. 数据备份 rsyncd服务器

    web服务器传文件到备份服务器: 一. rsync备份服务器,yum install -y rsync makdir /etc/rsyncd touch /etc/rsyncd/rsyncd.conf ...

  3. 【分类问题中模型的性能度量(一)】错误率、精度、查准率、查全率、F1详细讲解

    文章目录 1.错误率与精度 2.查准率.查全率与F1 2.1 查准率.查全率 2.2 P-R曲线(P.R到F1的思维过渡) 2.3 F1度量 2.4 扩展 性能度量是用来衡量模型泛化能力的评价标准,错 ...

  4. Python中的抽象基类

    1.说在前头 "抽象基类"这个词可能听着比较"深奥",其实"基类"就是"父类","抽象"就是&quo ...

  5. Spring的配置文件说明

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. 查看电脑连接的WiFi的密码

    这里提供两种办法:图形界面操作版.命令行操作版 方法一: 打开控制面板 点击红色框部分 方法二 打开命令行:输入命令netsh wlan show profiles "连接的WiFi的名称& ...

  7. one_day_one_linuxCmd---sz命令

    <坚持每天学习一个 linux 命令,今天我们来学习 sz && rz 命令> 前言:我们一般通过 ssh 客户端来进行远程登录和管理的,windows主机使用 ssh 登 ...

  8. 2019年阿里java面试题

    一.JVM与性能优化 描述一下 JVM 加载 Class 文件的原理机制? 什么是类加载器? 类加载器有哪些? 什么是tomcat类加载机制? 类加载器双亲委派模型机制? Java 内存分配? Jav ...

  9. PES介绍(转载)

    PES: 1.1 PES介绍: PES--Packetized  Elementary Streams  (分组的ES),ES形成的分组称为PES分组,是用来传递ES的一种数据结构.PES流是ES流经 ...

  10. pip速度慢解决办法

    pip速度慢解决办法 sudo pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 注意加不加sudo是 ...