CF1200D White Lines | 前缀和

4 2
BWWW
WBBW
WBBW
WWWB
4
3 1
BWB
WWB
BWB
2
5 3
BWBBB
BWBBB
BBBBB
BBBBB
WBBBW
2
2 2
BW
WB
4
2 1
WW
WW
4
In the first example, Gildong can click the cell(2,2), then the working screen becomes:
BWWW
WWWW
WWWW
WWWB
Then there are four white lines — the 2-nd and 3-rd row, and the 2-nd and 3-rd column.
In the second example, clicking the cell (2,3)makes the 2-nd row a white line.
In the third example, both the 2-nd column and 5-th row become white lines by clicking the cell (3,2).
题意:有一个n*n的格子,由'B'和'W'组成,B代表黑色,W代表白色。现在有一个k*k的橡皮擦,你可以选一个地方(i,j)(1≤i≤n-k+1,1≤j≤n-k+1)点击,它会将(i',j')(i≤i'≤i+k-1,j≤j'≤j+k-1)区域全部变为白色,若一行(列)全是W全是W那么这一行(列)就是一条白色的线。现在问你擦一次之后最多能有多少条线。
题解:我们可以利用前缀和统计每一行每一列有多少个黑格子,前缀和为0表示这一行(列)本来就是一条白线,可以算出初始白线的数量。然后我们一行行一列列判断从这个点开始往右(下)k个变成白色之后会不会增加一条线,再用前缀和记录前n行(列)一共能加几条线。最后枚举每一个可以点击的点看这个区间能增加多少白线更新ans。
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e3 + ;
char s[N][N];
int r[N][N],c[N][N],rr[N][N],cc[N][N];
int main(){
int n,k;
scanf("%d%d",&n,&k);
for (int i = ; i <= n; i++)
scanf("%s",s[i]+);
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
r[i][j] = r[i][j-]+(s[i][j]=='B');
c[i][j] = c[i][j-]+(s[j][i]=='B');
}
}
int tot = ;
for (int i = ; i <= n; i++)
tot+=(r[i][n] == ) + (c[i][n] == );
for (int i = ; i <= n; i++) {
for (int j = ; j <= n-k+; j++) {
rr[i][j] = rr[i-][j] + (r[i][j+k-] - r[i][j-] == r[i][n] && r[i][n]);
cc[i][j] = cc[i-][j] + (c[i][j+k-] - c[i][j-] == c[i][n] && c[i][n]);
}
}
int ans = tot;
for (int i = ; i <= n-k+; i++)
for (int j = ; j <= n-k+; j++)
ans = max(ans,tot+rr[i+k-][j]-rr[i-][j]+cc[j+k-][i]-cc[j-][i]);
printf("%d\n", ans);
return ;
}
CF1200D White Lines | 前缀和的更多相关文章
- D. White Lines
D. White Lines 给定一个$n\times n$的$WB$矩阵,给定一个$k*k$的能把$B$变成$W$的橡皮擦,求橡皮擦作用一次后,全为$W$的行.列总数最大值 前缀和差分 #inclu ...
- White Lines
D. White Lines 主要思路就是利用差分 对于行:如果在某一个点上,向右下角涂掉 k*k 的矩形能够使得新出现一行 "B" 那么就在这个点上 +1(这里的加 +1 需要利 ...
- CodeForces 1200D White Lines
cf题面 Time limit 1500 ms Memory limit 262144 kB 解题思路 官方题解 1200D - White Lines Let's consider a single ...
- CF1200D 【White Lines】
退役快一年了之后又打了场紧张刺激的$CF$(斜眼笑) 然后发现$D$题和题解里的大众做法不太一样 (思路清奇) 题意不再赘述,我们可以看到这个题~~好做~~在只有一次擦除机会,尝试以此为突破口解决问题 ...
- codeforce D. White Lines
二维前缀和 给你一个n*n的矩阵,里面有两种字符,‘W’和‘B’,代表black 和white .其实这个矩阵就是一个方形画板,你有一个k*k的橡皮只能用一次,使k*k的矩阵里的B变成W,问完全空白的 ...
- cf1200 D White Lines(二维差分)
题目大意 有一个大小为n的矩阵,每个1*1的单位为黑或白,我们可以用一个(只有一个)大小为k*k的白色矩阵覆盖,问:最多的时候有几条白线(横的全为白 或竖的全为白 即为白线). 思路 要想把一条线(以 ...
- Codeforces Round #578 (Div. 2)
Codeforces Round #578 (Div. 2) 传送门 A. Hotelier 暴力即可. Code #include <bits/stdc++.h> using names ...
- PHP7函数大全(4553个函数)
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...
- Xamarin Studio在Mac环境下的配置和Xamarin.iOS常用控件的示例
看过好多帖子都是Win环境装XS,Mac只是个模拟器,讲解在Mac环境下如何配置Xamarin Studio很少,也是一点点找资料,东拼西凑才把Xamarin Studio装在Mac上跑起来,如下: ...
随机推荐
- H3C 网络号和主机号
- theadClasses设置Bootstrap Table表头样式
通过theadClasses属性设置表头样式. thead-light设置灰色背景 //bootstrap table初始化数据 itxst.com $('#table').bootstrapTabl ...
- JS的作用域链与this指向
JS的作用域链是在函数创建时创建的.而this对象是在函数运行期间绑定的. 下面看几个例子,说明JS的作用域链和this是两套分离的链. 1) var name = 'window下的name< ...
- [转]安卓加固之so文件加固
一.前言 最近在学习安卓加固方面的知识,看到了jiangwei212的博客,其中有对so文件加固的两篇文章通过节加密函数和通过hash段找到函数地址直接加密函数,感觉写的特别好,然后自己动手实践探索s ...
- react入门:todo应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 符合阿里巴巴代码规范的checkstyle检测文件
一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...
- thinter图形开发界面
tkinter编程步骤 导入Tkinter 创建控件 import thinter 创建主窗口 #win = tkinter.Tk() 设置标题 win.title("xiaoxin&quo ...
- sort排序,按指定字段进去重,sort -t "^" -k 8 -su,ls给文件名中数字排序sort -k1.5n,Tab符要转义
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...
- Microsoft Ignite The Tour Beijing 记录: Learn Connect Explore
坦率的说,这是我第一次以讲师的身份参加微软的Ignite大会.同时我也很开心能作为微软社区MVP来参加这个活动.而我的演讲主题也和我的社区有关——Unity.C#以及跨平台开发. 这篇用来记录MSIg ...
- C#面试题整理2(不带答案)
一.C# 理论 1.1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 1.2.简述abstract.sea ...