退役快一年了之后又打了场紧张刺激的$CF$(斜眼笑)

然后发现$D$题和题解里的大众做法不太一样 (思路清奇)

题意不再赘述,我们可以看到这个题~~好做~~在只有一次擦除机会,尝试以此为突破口解决问题

我们考虑擦除某一行(列同理),分别记录这一行最左端和最右端的黑块位置(分别记为$l,r$)

这里存在以下三种情况:

1,这一行没有黑块,这时无论在哪擦除,这一行必然全白,记录答案后不再考虑

2,这一行的最左黑块和最右黑块之间的距离$>k$(即$r-l+1>k$),这时无论在哪擦除,这一行必然不会全白,不再考虑

3,这一行最左黑块和最右黑块之间的距离$<=k$,考虑能够使得这一行全为白色的擦除位置(假设我们当前考虑的是第$i$行)

容易得出,对于擦除位置的选择

可行的行:第$i-k+1((i-k+1)+k-1=i)$行到第$i$行

可行的列:第$l-k+1((l-k+1)+k-1=l)$列到第$l$列

即如果擦除位置$(x,y)$满足$i-k+1<=x<=i$且$l-k+1<=y<=l$,这一次擦除可以使第$i$行变白

对于答案统计,自然想到二维前缀和

我们只需在位置$(i-k+1,l-k+1),(i+1,l+1)+1$,$(i-k+1,l+1),(i+1,l-k+1)-1$即可(二维差分的常规操作)

差分完了再做前缀和即可得出答案(别忘了累加情况一的答案)

$P.S.i-k+1$和$l-k+1$不要数组越界

上代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int n,k,ans[maxn][maxn],l[][maxn],r[][maxn],res,bs;
bool exi[maxn][maxn];
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
string s;
cin>>s;
for(int j=;j<n;j++)
if(s[j]=='W')
exi[i][j+]=;
else
exi[i][j+]=;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
if(exi[i][j])
{
l[][i]=j;
break;
}
for(int j=n;j;j--)
if(exi[i][j])
{
r[][i]=j;
break;
}
if(!l[][i])
bs++;
}
for(int j=;j<=n;j++)
{
for(int i=;i<=n;i++)
if(exi[i][j])
{
l[][j]=i;
break;
}
for(int i=n;i;i--)
if(exi[i][j])
{
r[][j]=i;
break;
}
if(!l[][j])
bs++;
}
for(int i=;i<=n;i++)
{
if(l[][i]&&r[][i]-l[][i]+<=k)
{
int minx=max(i-k+,),miny=max(,r[][i]-k+);
ans[minx][miny]++;
ans[i+][miny]--;
ans[minx][l[][i]+]--;
ans[i+][l[][i]+]++;
}
if(l[][i]&&r[][i]-l[][i]+<=k)
{
int miny=max(i-k+,),minx=max(,r[][i]-k+);
ans[minx][miny]++;
ans[minx][i+]--;
ans[l[][i]+][miny]--;
ans[l[][i]+][i+]++;
}
}
for(int i=;i<=n-k+;i++)
for(int j=;j<=n-k+;j++)
{
ans[i][j]+=ans[i-][j]+ans[i][j-]-ans[i-][j-];
res=max(res,ans[i][j]);
}
printf("%d\n",res+bs);
return ;
}

CF1200D 【White Lines】的更多相关文章

  1. 题解 CF1216C 【White Sheet】

    虽然也很水,但这道还是比前两道难多了... 题目大意:给你三个位于同一平面直角坐标系的矩形,询问你后两个是否完全覆盖了前一个 首先,最直观的想法应该是,把第一个矩形内部每个整数点检查一下,看看是否位于 ...

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

  3. 【MVC 4】7.SportsSore:完成购物车

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...

  4. 【MVC 4】6.SportsSore:导航

     作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 前面的文章[MVC 4]5.SportsSore —— 一个真实的应用程序 建立了 Sports ...

  5. 【29.89%】【codeforces 734D】Anton and Chess

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. 【20.51%】【codeforces 610D】Vika and Segments

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  8. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. Python基础之【第一篇】

    Python简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...

随机推荐

  1. python高级语法1

    1.解压序列赋值给多个变量 p = (4, 5, 6) x, y , z = p # x = 4, y = 5, z = 6 若可迭代对象超过变量个数,会抛出ValueError 用处:可以解压赋值任 ...

  2. Java实现贪吃蛇游戏(含账号注册登录,排行榜功能)

    这是我第一次工程实践的作业,选题很多,但我只对其中的游戏开发感兴趣,可游戏就两三个类型,最终还是选择了贪吃蛇.其实就贪吃蛇本身的代码实现还算是比较简单的,可是实践要求代码行达到一定数量,所以我就额外给 ...

  3. RDD源码分析

    RDD源码解析 一. RDD.scala - Resilient Distributed Dataset (RDD) 弹性分布式数据集 弹性: 体现在计算上面 - the basic abstract ...

  4. 10.InfluxDB-InfluxQL基础语法教程--OFFSET 和SOFFSET子句

    本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) OFFSET 和SO ...

  5. python 环境配置的导入与导出

    Python——配置环境的导出与导入   导出Python环境安装包[root@bogon ~]# pip freeze > packages.txt这将会创建一个 packages.txt文件 ...

  6. Jenkins 打tag回滚

    利用jenkins,从gitlab上拉取代码,然后发布,如果想进行代码回退,其实还是代码发布,拉取的时候,选择合适的标签. 一.利用Git parameter插件选择branch或tag.下面的文本参 ...

  7. Python环境安装与基础语法(4)——内存管理、if分支

    Python内存管理 python中有自动清理内存垃圾的功能,当变量的引用计数为0,则可以被有计划的垃圾回收GC 常量会在系统中被多次引用,所以常量的引用计数无法确定 程序控制 顺序:按照先后顺序逐条 ...

  8. computed和watch的用法和区别

    computed可以监听v-model(data)中的值,只要值发生变化 他就会重新去计算 computed必须是要有一个返回值的哦 <div id="app"> &l ...

  9. Linux终端执行shell脚本,提示权限不够

    在学习dubbo过程中,上传自己写的脚本,执行的时候提示“权限不够”,从网上了解到是因为没有为脚本赋权限 解决方法是使用chmod命令为shell脚本赋予权限 chmod 777 ./service- ...

  10. shell 字符菜单管理

    1.创建一个脚本func.sh 脚本如下func2.sh #!/bin/bash function menu(){ title="My Menu" url="www.la ...