Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)
题意是需要求最大的扩散时间,最后输出的是一开始的火源点,那么我们比较容易想到的是二分找最大值,但是我们在这满足这样的点的时候可以发现,在当前扩散时间k下,以这个点为中心的(2k+1)2的正方形块内必须全部都是'X'才行,那么要访问这样的块内的'X'个数显然需要使用二维前缀和维护一下就可以O(1)求出个数,那么这部分问题我们解决,接下来就是二分的如何Check,那么既然我们之前找到了这样满足当期扩散时间的点后,我们只需要直接将这块矩形内部的点全部打标记,显然我们可以得知,如果当前扩散时间是满足要求的,那么所有的'X'最后都会被打上标记,那么我们可以利用这一性质,对满足这样的矩形进行二维差分,最后O(n*m)把标记推掉,在check一遍所有被打伤标记的点是不是等于等于一开始'X'的个数,若等于,那么我们可以将区间移至右边,否则移至左边。
最后记得不要用cin,cout,T的死去活来.....
// ——By DD_BOND
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e6+;
inline ll sqr(ll x){ return x*x; }
char s[MAXN];
int main(void)
{
int n,m; scanf("%d%d",&n,&m);
vector<vector<int> >ok (n+,vector<int>(m+));
vector<vector<int> >sum(n+,vector<int>(m+));
vector<vector<int> >tmp(n+,vector<int>(m+));
for(int i=;i<=n;i++){
scanf("%s",s+);
for(int j=;j<=m;j++) if(s[j]=='X') sum[i][j]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
sum[i][j]+=sum[i-][j]+sum[i][j-]-sum[i-][j-];
int l=,r=(min(n,m)-)/,res=;
while(l<=r){
int mid=(l+r)>>;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
tmp[i][j]=;
for(int i=mid+;i<=n-mid;i++)
for(int j=mid+;j<=m-mid;j++)
if(sum[i+mid][j+mid]-sum[i-mid-][j+mid]-sum[i+mid][j-mid-]+sum[i-mid-][j-mid-]==sqr(*mid+)){
tmp[i-mid][j-mid]+=;
tmp[i-mid][j+mid+]+=-;
tmp[i+mid+][j-mid]+=-;
tmp[i+mid+][j+mid+]+=;
}
int f=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(tmp[i][j]+=tmp[i-][j]+tmp[i][j-]-tmp[i-][j-])
f++;
if(f==sum[n][m]) l=mid+,res=mid;
else r=mid-;
}
printf("%d\n",res);
for(int i=res+;i<=n-res;i++)
for(int j=res+;j<=m-res;j++)
if(sum[i+res][j+res]-sum[i-res-][j+res]-sum[i+res][j-res-]+sum[i-res-][j-res-]==sqr(*res+))
ok[i][j]=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++) putchar((ok[i][j]?'X':'.'));
puts("");
}
return ;
}
Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)的更多相关文章
- E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)
题:https://codeforces.com/contest/1262/problem/E 分析:预处理出阵列中的矩阵,然后二分答案还原题目的烧火过程,判断是否满足要求 #include<b ...
- 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 ...
- BZOJ1177 [Apio2009]Oil 二维前缀和 二维前缀最值
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1177 题意概括 在一个n*m的矩阵中,每一个位置一个数字. 现在让你选出3个k*k的矩阵,它们互不 ...
- Codeforces 835C - Star sky - [二维前缀和]
题目链接:http://codeforces.com/problemset/problem/835/C 题意: 在天空上划定一个直角坐标系,有 $n$ 颗星星,每颗星星都有坐标 $(x_i,y_i)$ ...
- Codeforces 1080C 题解(思维+二维前缀和)
题面 传送门 题目大意: 有一个黑白的棋盘,现在将棋盘上的一个子矩形全部染成黑色,另一个子矩形全部染成白色 求染完色后黑,白格子的总数 分析 我们可以发现,对于一个(1,1)到(x,y)的矩形,若xy ...
- C - Monitor CodeForces - 846D (二维前缀和 + 二分)
Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
随机推荐
- docker-compose简单使用
1,下载安装docker-compose # http://get.daocloud.io/ curl -L https://get.daocloud.io/docker/compose/releas ...
- linux 系统下 tar 的压缩与解压缩命令
1.压缩 [small@sun shine]# tar -zcvf java.tar.gz java java/ java/default/ java/default/THIRDPARTYLICENS ...
- pyinstaller打包的exe太大?你需要嵌入式python玄学 探索篇
上篇我们讲到pip的安装以及普通库用pip的安装方法 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 拓展篇zhuanlan.zhihu.com 问题纷沓而 ...
- DVWA--CSP Bypass
0x01看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会 ...
- 《第40天 : JQuery - 手风琴列表》
源码下载地址:链接:https://pan.baidu.com/s/1x9c1... 提取码:2bzr 如果有赞就很幸福了. 今天要和你们分享的是我看了JQuery库的手风琴列表样式.它的核心在于它的 ...
- JavaScript 文件拖拽上传插件 dropzone.js 介绍
http://www.renfei.org/blog/dropzone-js-introduction.html
- 后盾网lavarel视频项目---1、数据迁移
后盾网lavarel视频项目---1.数据迁移 一.总结 一句话总结: 1.lavarel的数据迁移比较简单,就是用php来创建数据表 2.创建迁移文件:php artisan make:migrat ...
- squid的处理request和reply的流程
request处理: Breakpoint , SQUID_MD5Final ( digest= { (gdb) bt # SQUID_MD5Final ( digest= # ) at store_ ...
- 安装mysql数据库要注意的
只安装基本功能即可,以后要的话可以加 需要配置环境变量 最好不要将数据存放在c盘,默认在 C:\ProgramData\MySQL\MySQL Server 5.6 里面存放建的表和存放的数据
- gitlab webhook jenkins 403问题解决方案
1.gitlab webhook 403问题,一般描述为Error 403 anonymous is missing the Job/Build Permission 解决方法: 安装插件:gitla ...