二维前缀和

给你一个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. Navicat 安装+连接

    Navicat安装包: 链接:https://pan.baidu.com/s/1bvKagRJ0w_7LH0t4597ycA 提取码:yftv 如MySQL 8.0+ 安装成功后,教程见本博 可用Na ...

  2. 使用Dockerfile构建镜像命令自己的理解

    1.FROM 基于那个基础命令开始构建镜像,我的理解就是选择一个操作系统 2.CMD 里面放的是指定一个容器启动时要运行的命令 3.ENTRYPOINT 类似于CDM命令,不过 docker run ...

  3. LeetCode 938. 二叉搜索树的范围和

    题目链接:https://leetcode-cn.com/problems/range-sum-of-bst/ 给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 二叉搜 ...

  4. 1级搭建类113-Oracle 11gR2 SI FS(OEL 6.10)

    Oracle 11g 单实例文件系统搭建(EMDC) EMDC:Database Control 单实例主机.数据库等监控,这东西12c之后没有了 EMGC:Grid Control 单独安装GC软件 ...

  5. 深入浅出Mybatis系列六-objectFactory、plugins、mappers简介与配置

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(五)---TypeHandler简介及配 ...

  6. 函数节流-歪说js

    歪谈js 起因: 夜深人静,月朗星稀.'window.onresize 事件' 与 '浏览器'在大战300回合,console.log('1') 1s 十次,然后就结束了,一个悲伤的故事. 事实证明太 ...

  7. PWA - 整体(未完)

    渐进式 Web 应用(PWA) 运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序. PWA 的优势 可被发现 易安装 manifest(https://develop ...

  8. 解决jquery click事件执行两次

    js 解决办法 event.preventDefault() :阻止默认行为,可以用 event.isDefaultPrevented() 来确定preventDefault是否被调用过了 event ...

  9. C语言-const再理解(转)

    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: co ...

  10. 回形数字矩阵(Java)

    将矩阵从里到外分为多层,每一层都是一个口字型数字序列,方向都是顺时针/逆时针,由此我们可以将问题分解为相同的子问题来解决 回形矩阵概述 ☃ 回形矩阵有n行n列 ☃ 数字按顺时针或者逆时针递增 **使用 ...