题: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. ASP.NET Identity实现分布式Session,Docker+Nginx+Redis+ASP.NET CORE Identity

    零.背景介绍 在学习ASP.NET CORE开发的过程中,身份认证是必须考虑的一项必要的组件.ASP.NET CORE Identity是由微软官方开发的一整套身份认证组件,兼具完整性和自由度.Doc ...

  2. <mvc:default-servlet-handler />说明

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  3. HTTP协议(三):状态码

    前言 作者说:在上一节的内容中,HTTP大佬介绍了他是怎么让服务器和用户达成信息交互的,详细的说明了连接建立过程中用到的一些基本的技术原理,包括请求报文响应报文.建立持久化连接用的Cookie技术等内 ...

  4. ubuntu root用户下找不到环境变量解决办法

    打开 gedit /root/.bashrc   ,在文件的末尾添加: source /etc/profile 然后执行更新:source /root/.bashrc

  5. CSS(3)之 less 和rem

    less 预编译脚本语言. LESS 语法 less语法2 LESS中文 rem rem的适配原理 rem 是相对于页面根源素html的字体大小的一个尺寸单位 页面内容可以使用rem为单位,那么htm ...

  6. winform 集成 log4net

    1.引入库log4net.dll 2.展开项目文件下的Properties文件夹,打开AssemblyInfo.cs并在AssemblyInfo.cs中添加一行:在AssemblyInfo.cs中添加 ...

  7. 安装adobe reader阅读器

    首先  在我的网盘里有那个软件. 安装的教程在这个歌网址:http://www.zhanshaoyi.com/6730.html

  8. SQL基础教程(第2版)第4章 数据更新:4-1 数据的插入(INSERT)

    第4章 数据更新:4-1 数据的插入(INSERT) ● 将列名和值用逗号隔开,分别括在()内,这种形式称为清单.● 对表中所有列进行INSERT操作时可以省略表名后的列清单.● 插入NULL时需要在 ...

  9. python刷LeetCode:5. 最长回文子串

    难度等级:中等 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab& ...

  10. DFS判断连通图

    因为是连通图,所以从任意一点出发,一定可以通过一遍深度优先遍历就能走过所有的点和边,就可以利用这个性质来很容易的通过DFS判断图是否为连通图 下面是具体算法: