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语 ...
随机推荐
- .Net 高级 模拟事件模型
第一步:创建一个类,并继承:IHttpModule using System; using System.Collections.Generic; using System.Linq; using S ...
- CSS3动画实践——简易牛顿摆
最近在练习CSS3的关键帧动画(keyframes),于是做了一个简单的牛顿摆(听名字可能陌生,但你一定见过它): 先上代码(老版本IE可能存在兼容性问题): <!DOCTYPE html> ...
- i春秋四周年福利趴丨一纸证书教你赢在起跑线
i春秋四周年庆典狂欢已接近尾声 作为压轴福利 CISP-PTE认证和 CISAW-Web安全认证 迎来了史无前例的超低折扣 每个行业都有特定的精英证书,例如会计行业考取的是注册会计师证,建筑行业是一级 ...
- ssh关闭服务关闭 nohup
默认输出 # nohup cmd & 指定输出路径 # nohup cmd > mylog.out 2>&1 &
- Visual Studio Code 远程开发探秘
摘要: IDE新时代! 作者:SHUHARI 的博客 原文:Visual Studio Code 远程开发探秘 Fundebug按照原文要求转载,版权归原作者所有. 在以前的文章 有趣的项目 - 在浏 ...
- 【转】面试还搞不懂redis,快看看这40道Redis面试题(含答案和思维导图)
———————————————— 版权声明:本文为CSDN博主「程序员追风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog. ...
- 【Spring Boot】Spring Boot之使用ImportBeanDefinitionRegistrar类实现动态注册Bean
一.ImportBeanDefinitionRegistrar类介绍 ImportBeanDefinitionRegistrar类通过其他@Configuration类通过@Import的方式来加载, ...
- postgreSQL 自动递增序号
创建表格 CREATE TABLE test ( id serial, name ) not null ); 查询当前创建好的表格 插入数据 BEGIN TRANSACTION; INSERT INT ...
- Python环境安装与基础语法(1)——计算机基础知识
Python安装 pip #包管理工具 pip install #安装包 pip list #查看包 IPython #增强的python shell,自动补全,自动缩进,支持shell,增加了很多函 ...
- appium---app输入中文
在app自动化的过程中,都会遇到输入中文的问题,今天总结下app自动化如何输入中文 app输入中文 在启动app的时候在参数里面添加unicodeKeyboard和resetKeyboard后,运行代 ...