D. White Lines

主要思路就是利用差分

对于行:如果在某一个点上,向右下角涂掉 k*k 的矩形能够使得新出现一行 “B” 那么就在这个点上 +1(这里的加 +1 需要利用差分来完成)

列同理,如果有现成的空白行,记录一下即可,最后直接加上

代码:

// Created by CAD on 2019/8/12.
#include <bits/stdc++.h>
using namespace std;
using ll=long long; char g[2005][2005];
int a[2005][2005];
int b[2005][2005];
void dif(int x1,int y1,int x2,int y2)
{
a[x1][y1]++,a[x2][y2]++;
a[x1][y2]--,a[x2][y1]--;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,k;cin>>n>>k;
int ok=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
cin>>g[i][j];
for(int i=1;i<=n;++i)
{
int maxn=0,minn=0;
for(int j=1;j<=n;++j)
{
if(g[i][j]=='B')
{
maxn=j;
if(!minn)
minn=j;
}
}
if(minn==0) ok++;
else if(maxn-minn+1<=k)
dif(max(0,i-k)+1,max(0,maxn-k)+1,i+1,minn+1);
}
for(int j=1;j<=n;++j)
{
int maxn=0,minn=0;
for(int i=1;i<=n;++i)
{
if(g[i][j]=='B')
{
maxn=i;
if(!minn) minn=i;
}
}
if(minn==0) ok++;
else if(maxn-minn+1<=k) dif(max(0,maxn-k)+1,max(0,j-k)+1,minn+1,j+1);
}
ll ans=0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
ans=max(ans,1ll*a[i][j]+ok);
}
}
cout<<ans<<endl;
return 0;
}

White Lines的更多相关文章

  1. CodeForces 1200D White Lines

    cf题面 Time limit 1500 ms Memory limit 262144 kB 解题思路 官方题解 1200D - White Lines Let's consider a single ...

  2. D. White Lines

    D. White Lines 给定一个$n\times n$的$WB$矩阵,给定一个$k*k$的能把$B$变成$W$的橡皮擦,求橡皮擦作用一次后,全为$W$的行.列总数最大值 前缀和差分 #inclu ...

  3. CF1200D White Lines | 前缀和

    传送门 Examples input 1 4 2 BWWW WBBW WBBW WWWB output 1 4 input 2 3 1 BWB WWB BWB output 2 2 input 3 5 ...

  4. codeforce D. White Lines

    二维前缀和 给你一个n*n的矩阵,里面有两种字符,‘W’和‘B’,代表black 和white .其实这个矩阵就是一个方形画板,你有一个k*k的橡皮只能用一次,使k*k的矩阵里的B变成W,问完全空白的 ...

  5. CF1200D 【White Lines】

    退役快一年了之后又打了场紧张刺激的$CF$(斜眼笑) 然后发现$D$题和题解里的大众做法不太一样 (思路清奇) 题意不再赘述,我们可以看到这个题~~好做~~在只有一次擦除机会,尝试以此为突破口解决问题 ...

  6. cf1200 D White Lines(二维差分)

    题目大意 有一个大小为n的矩阵,每个1*1的单位为黑或白,我们可以用一个(只有一个)大小为k*k的白色矩阵覆盖,问:最多的时候有几条白线(横的全为白 或竖的全为白 即为白线). 思路 要想把一条线(以 ...

  7. PHP7函数大全(4553个函数)

    转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...

  8. Xamarin Studio在Mac环境下的配置和Xamarin.iOS常用控件的示例

    看过好多帖子都是Win环境装XS,Mac只是个模拟器,讲解在Mac环境下如何配置Xamarin Studio很少,也是一点点找资料,东拼西凑才把Xamarin Studio装在Mac上跑起来,如下: ...

  9. Total Commander 8.52 Beta 1

    Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...

随机推荐

  1. Ubuntu14.04安装Caffe(CPU)

    一 安装Ubuntu14.04LTS Ubuntu分区 1.SWAP 交换分区:与物理内存相当. 2.“/” 根目录分区:该区大小由硬盘大小而定,10-100G. 3.“HOME” 家目录分区:该区也 ...

  2. YOLOv3:Demo needs OpenCV for webcam images

    Compiling With CUDA And OpenCV: change the Makefile in the base directory to read: GPU=1 OPENCV=1 ma ...

  3. 为什么单线程的Redis却能支撑高并发

    Redis的高并发和快速原因 redis是基于内存的,内存的读写速度非常快: 核心是基于非阻塞的IO多路复用机制: redis是单线程的,反而省去了很多上下文切换线程的时间: 为什么Redis是单线程 ...

  4. Linux之常用脚本

    1) #检查php Money 队列脚本是否启动 php_count=`ps -ef | grep Money | grep -v "grep" | wc -l` ];then e ...

  5. LeetCode——等差数列划分

    题目: 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为等差数列: 1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9 以下数列 ...

  6. 关于IDEA顶部栏隐藏问题,

    那天手残,点到了 IDEA顶部菜单栏 > View > Appearance >Main Menu ,然后取消了勾选 然后就成了这个样子,没了顶部栏,恢复不过来,不知道如何进行设置 ...

  7. 查看Linux服务器硬件信息

    一:查看cpu# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数cat /proc/cpui ...

  8. Tomcat配置JNDI

    JNDI是什么?使用JNDI有什么好处? JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一. 我个人对j ...

  9. Delphi ListBox组件

  10. Single List Reversion

    LeetCode 1. 基于头插法的迭代: public ListNode reverseList(ListNode head) { if(head == null) return null; Lis ...