二维前缀和

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

思路:

用1代替B,0代替W,然后维护一个前缀和数组,看能否用一个橡皮的操作使这一列或行的前缀和变为0,然后维护答案就好了,具体操作可以把列对称成行,相当于搞两个不同的数组,这样就只需要搞两个数组的行就可以了。如图:

剩下的具体思路看代码吧

 #include<bits/stdc++.h>
using namespace std;
const int N=;
int n,k,ans,tot,r[N][N],c[N][N],okr[N][N],okc[N][N];
char mp[N][N];
int main()
{
scanf("%d%d%*c",&n,&k);
for(int i=;i<=n;scanf("%*c"),i++)
for(int j=;j<=n;j++)
scanf("%c",&mp[i][j]);
// 输入
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
r[i][j]=r[i][j-]+(mp[i][j]=='B'),c[i][j]=c[i][j-]+(mp[j][i]=='B');
// 记录 1代表'B',0代表'W';
// 这里将数组关于斜对角线对称一下,问题就变成了统计对称前擦除操作后有多少个全0的行!
// 和对称后的那个数组擦除操作后有多少的全0的行(因为对称后列变成了行)如上图
for(int i=;i<=n;i++)tot+=(r[i][n]==)+(c[i][n]==);
// tot是没有擦除操作就是全0行的个数
for(int i=;i<=n;i++)
for(int j=;j<=n-k+;j++)
okr[i][j]=(r[i][j+k-]-r[i][j-]==r[i][n]&&r[i][n]!=)+okr[i-][j],
//这一行中只有长度为k的区间有1等价于【(r[i][j+k-1]-r[i][j-1]==r[i][n]】
// 【r[i][n]!=0】避免重复计算初始为全0行的个数
//那么可以通过擦除操作对答案做出贡献 ,并作一个前缀和
okc[i][j]=(c[i][j+k-]-c[i][j-]==c[i][n]&&c[i][n]!=)+okc[i-][j];
//同理
for(int i=;i<=n-k+;i++)
for(int j=;j<=n-k+;j++)
ans=max(ans,tot+okr[i+k-][j]-okr[i-][j]+okc[j+k-][i]-okc[j-][i]);
//维护一个初始全0行+操作后对答案贡献的两个区间和
printf("%d",ans);
}

codeforce D. White Lines的更多相关文章

  1. White Lines

    D. White Lines 主要思路就是利用差分 对于行:如果在某一个点上,向右下角涂掉 k*k 的矩形能够使得新出现一行 "B" 那么就在这个点上 +1(这里的加 +1 需要利 ...

  2. CodeForces 1200D White Lines

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

  3. D. White Lines

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

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

  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. excel给一列数据添加前缀和后缀

    1.选中一列单元格后设置单元格格式,在自定义中输入-----“前缀”@(前缀为需要添加的内容) 输入----@“后缀” 2.字符串拼接:“前缀”&B1,B1&“后缀”

  2. VPS性能测试shell工具以及锐速安装

    比较熟悉的UnixBench非常耗费资源,需要长时间跑满cpu和IO,很多主机商都深恶痛绝,会做各种限制,其实也代表不了实际使用的业务效果,毕竟真正需要那么多cpu和IO的应用并不多.而网络状况却是大 ...

  3. 141.内置上下文处理器debug、request、auth、messages、media、static、csrf

    上下文处理器 上下文处理器可以返回一些数据,在全局模板中都可以使用,比如登录后的用户数据,在很多页面中都需要使用,那么我们就可以方在上下文处理器中,就没有必要在每个视图中返回这个对象了. 在setti ...

  4. CSS之 元素显示隐藏,用户界面样式,文本溢出隐藏,精灵技术,三角形

    元素的显示与隐藏 display 显示 display 设置或检索对象是否及如何显示 display: none; 隐藏对象 display: block; 除了转换为块级元素, 同时还有显示元素的意 ...

  5. idea基于spring boot的依赖分开打包

    idea版本为2018.3.3 1.在菜单栏点击如图所示图标 Project Structure: 2.选择左侧菜单Artificial,然后在右侧点击 + 号按钮,在弹出的菜单中选择JAR -> ...

  6. Python 绘图 cookbook

    目录 python绘图常见bug matplotlib包加载 解决中文绘图乱码解决方法 解决python中用matplotlib画多幅图时出现图形部分重叠的问题 python绘图常见bug matpl ...

  7. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  8. 粒子群算法优化BP生物能神经网络

    定义: 粒子群中每个粒子的位置表示BP神经网络当前迭代中权值的集合,每个粒子的维数由网络中起连接作用的权值的数量和阈值个数决定,以给定训练样本集的神经网络输出误差作为神经网络训练问题的适应度函数,适应 ...

  9. Leetcode Week3 Merge Two(k) Sorted Lists

    Question Q1.Merge two sorted linked lists and return it as a new list. The new list should be made b ...

  10. BK: How to read a book 第四篇

    第四篇 阅读的最终目标 第二十章 阅读的第四个层次:主题阅读 在做主题阅读时的要求: 1. 知道:知道应该读哪些书. 在面对如此庞大的相关资料时,我们要如何决定我们要研究的主题是什么呢. 如何判断属于 ...