繁星、背包、道路设计——NOIP2017模拟赛题解——暑假篇

这次是真的考炸了

一.繁星(star)

1.题目

【问题描述】

要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢。突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能是两个颜色之一,白或黑。像素(x,y)处是一颗星星,当且仅当,像素(x,y),(x-1,y),(x+1,y),(x,y-1),(x,y+1)都是白色的。因此一个白色像素有可能属于多个星星,也有可能有的白色像素不属于任何一颗星星。但是这张照片具有研究价值,所以大川不想把整张照片都送给小伙伴,而只准备从中裁下一小块长方形照片送给他。但为了保证效果,大川认为,这一小块相片中至少应该有k颗星星。
现在大川想知道,到底有多少种方法裁下这一小块长方形相片呢?

【输入格式】

输入的第一行包含三个正整数n,m,k,意义见题目所示。
接下来n行,每行一个长度为m的字符串,字符串仅由'.'和'*'构成,'.'表示这个像素为黑色,'*'表示这个像素为白色。

【输出格式】

输出的第一行包含一个整数,表示大川有多少种满足题意的裁剪方法。

【样例输入】

5 6 3
***...
****..
.**.*.
******
.*.***

【样例输出】

3

2.题解 

这道题的难点就是在于确定要裁剪的矩形,并统计里面的星星个数,这是我们重点讨论的。

首先,我们想要统计里面的星星个数,可以先用类似前缀和的东西,统计以点(x, y)和点(1, 1)为左下和右上端点的矩形内的星星个数(其实只用统计星星的中心就行了)。

然后,我们想,一个矩形是由上下左右四条边组成的,那不妨我们先根据要求拥有的星星个数k来确定矩形的上下两条边,再确定左右两条边,就一个O(n^{3})的算法,能过的。

具体说一下确定矩形四条边时的过程:

首先一个循环枚举最上面的边(0~n-1)

再从最上面那条边的下面一条边开始往下枚举,只要上下两条边之间有k颗星星就行了。

再枚举左边的那条边(0~m-1)

最后从左面的那条边的后一条边开始枚举,只要整个矩形一有k颗星星&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值