CF1200D 【White Lines】
退役快一年了之后又打了场紧张刺激的$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】的更多相关文章
- 题解 CF1216C 【White Sheet】
虽然也很水,但这道还是比前两道难多了... 题目大意:给你三个位于同一平面直角坐标系的矩形,询问你后两个是否完全覆盖了前一个 首先,最直观的想法应该是,把第一个矩形内部每个整数点检查一下,看看是否位于 ...
- 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 ...
- 【MVC 4】7.SportsSore:完成购物车
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...
- 【MVC 4】6.SportsSore:导航
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 前面的文章[MVC 4]5.SportsSore —— 一个真实的应用程序 建立了 Sports ...
- 【29.89%】【codeforces 734D】Anton and Chess
time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【20.51%】【codeforces 610D】Vika and Segments
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Python基础之【第一篇】
Python简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
随机推荐
- 基于vue+springboot+docker网站搭建【九】负载均衡
后台mall-admin 负载均衡 1.新启动一个mall-admin docker实例 docker run -p 9002:9001 --name mall-admin-9002 --link m ...
- [b0014] HDFS 常用JAVA 操作实战
目的: 学习用java进行的常用hdfs操作 参考: [b0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前 ...
- os模块,sys模块,json和pickle模块,logging模块
目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import ...
- Asp.Net六大内置对象
前面学习mvc管道处理模型的时候,我们晓的HttpContext是贯穿全文的一个对象,在HttpRuntime产生,现在我们所谓的Asp.Net六大内置对象,其实就是HttpContext的属性.具体 ...
- GCN python 实现2:利用GCN进行节点分类
参考:https://www.baidu.com/link?url=5oU-O_YQV8DdSTtRkgzsQ_vuwjJHyUOxqeAKhq98ZA5XtvKW8PNQwXgSlr5GpESRqh ...
- MATLAB之指定文件读取与读取地址输出
一.读取指定文件夹下的指定格式文件 (1) 利用命令 uigetdir('','') 参数解释: uigetdir('所要打开的盘地址','对打开的弹出框进行描述') 例如:uigetdir('C:\ ...
- CMakeLists.txt编写常用命令
目录 1. 设置cmake最小版本 2. 设置项目名称 3. 设置编译目标类型 4. 指定编译包含的源文件 1. 明确指明包含的源文件 2. 搜索指定目录的所有的cpp文件 3. 自定义搜索规则 4. ...
- 进化后的const分析
C语言中的const const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在只读存储区分配空间 const只在编译期有用,在运行期无用 注意:c ...
- Qt工程管理
Qt Creator工程管理Qt Creator以工程项目的方式对源码进行管理一个Qt Creator工程包含不同类型的文件 .pro项目描述文件.pro.user用户配置描述文件 //由Qt Cre ...
- 三种MPM在工作时的属性
l prefork:域fork,一个进程一个请求 l worker:一个线程一个请求,一个进程生成多个线程 l event:事件模型,单线程响应多个请求,基于事件驱动 在主配置文件当中,在htt ...