CF1200D-White Lines【二维前缀和】
正题
题目链接:https://www.luogu.org/problem/CF1200D
题目大意
一个黑白组成的n∗nn*nn∗n矩阵,然后可以选择将k∗kk*kk∗k的覆盖为白色,然后求有多少白线(整行或整列都是白色)。
解题思路
对于每一行或每一列可以变成白线的话那么可行范围一定是一个矩阵,我们用二维前缀和,每次让整个可以产生贡献的矩阵都+1+1+1,然后求值最大的位置即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2100;
int n,k,ans[N][N],maxs,cl;
char s[N][N];
void addw(int x1,int y1,int x2,int y2)
{x1=max(x1,1);y1=max(y1,1);x2=max(x2,1);y2=max(y2,1);//printf("%d,%d,%d,%d\n",x1,y1,x2,y2);ans[x1][y1]++;ans[x1][y2+1]--;ans[x2+1][y2+1]++;ans[x2+1][y1]--;
}
int main()
{scanf("%d%d\n",&n,&k);for(int i=1;i<=n;i++)gets(s[i]+1);for(int i=1;i<=n;i++){int mx=0,mi=n+1;for(int j=1;j<=n;j++)if(s[i][j]=='B') mx=max(mx,j),mi=min(mi,j);if(!mx) {cl++;continue;}if(mx-mi+1>k) continue;addw(mx-k+1,i-k+1,mi,i);}for(int i=1;i<=n;i++){int mx=0,mi=n+1;for(int j=1;j<=n;j++)if(s[j][i]=='B') mx=max(mx,j),mi=min(mi,j);if(!mx) {cl++;continue;}if(mx-mi+1>k) continue;addw(i-k+1,mx-k+1,i,mi);}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans[i][j]+=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];for(int i=1;i<=n-k+1;i++)for(int j=1;j<=n-k+1;j++)maxs=max(maxs,ans[i][j]);printf("%d",maxs+cl);
}
CF1200D-White Lines【二维前缀和】相关推荐
- Monitor CodeForces - 846D ——二维前缀和
Recently Luba bought a monitor. Mon itor is a rectangular matrix of size n × m. But then she started ...
- 【HDU - 1937 】Finding Seats(二维前缀和+尺取法)
题干: A group of K friends is going to see a movie. However, they are too late to get good tickets, so ...
- 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
- 二维前缀和+差分 HDU6514 Monitor
Monitor [ HDU - 6514 ] 题目大意:给你个n×m的区域,每个区域被选中标记为1,没被选中标记为0,然后给一些标记的区域,查询若干个区域问是否有0的 一道二维前缀和的题目,想通没什么 ...
- 牛妹吃豆子(二维前缀和模板,修改+求和)
调了半天忘了要求两次前缀和了. 先对前缀和数组进行修改, 第一次求前缀和得到的是修改后的原矩阵,再求一次前缀和得到二维前缀和,然后根据容斥定理求区间的二维前缀和即可 #include<iostr ...
- 【每日DP】day3 P1387 最大正方形(奇怪的DP增加了 / 二维前缀和)难度⭐⭐★
奇怪的DP增加了 这道题,刚看见真是一脸懵逼,看了题解才明白. 本题中神奇的转移方程是: f[i][j]=min(min(f[i][j−1],f[i−1][j]),f[i−1][j−1])+1f[i] ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和
文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...
- 海啸(二维前缀和/二维树状数组)
链接:https://ac.nowcoder.com/acm/problem/21862 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 中石油训练赛 - Block(二维前缀和+思维)
题目描述 Alice得到了一张由n×m个黑白像素点组成的图片,她想要压缩这张图片.压缩图片的过程如下: 1.首先,选择一个正整数k(k>1),将图片划分成若干个k×k的小块.如果n,m不能被k整 ...
最新文章
- [译] Bob,函数式编程是什么鬼?
- 清华集训2014 day2 task1 简单回路
- Android开发之发送邮件功能的实现(源代码分享)
- zabbix实现mysql数据库的监控
- vb实时错误6 溢出_java内存溢出系列(6): Out of swap space?
- Visual Studio 宏
- 信息学奥赛一本通(1007:计算(a+b)×c的值)
- php dm,DM_cp.php
- 避免线上故障的10条建议
- .NET/C# 使用Stopwatch测量运行时间
- CentOS 7下配置IP地址
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- 一步一步学Silverlight 2系列(2):基本控件_转载
- glibc升级_Linux关于glibc等基本知识整理
- 中国最美滴100首古诗
- swift学习笔记一
- android plc,基于Android的智能PLC操控软件设计与实现
- js添加多marker 高德地图_h5高德地图javascript调起app导航定位多个marker
- 细雨湿衣看不见 闲花落地听无声
- 【经验帖】深度学习如何训练出好的模型
热门文章
- matlab dy,高手,请问用matlab如何解下面方程:y*Dy=a+b*y;我的计算结果里面含有wrightOmega ,怎样解出一般解?...
- linux 修复图形界面,图形界面操作的备份和恢复Linux发行版
- php 初始二维数组长度,php二维数组排序与默认自然排序的方法介绍
- 定义一个1 1=11 用c语言什么输出来,问题 A: C语言11.1(示例代码)
- mysql判断是否在日期区间_通过sql判断时间区间是否存在数据
- leetcode-345-翻转字符串中的元音字母
- org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the
- [Nginx]location 指令说明
- [Java基础]Stream流的常见中间操作方法
- 蓝桥杯2015初赛-奇妙的数字