#P14723. [Bulgarian2022春季赛]Rain

    ID: 13939 传统题 3000ms 1024MiB 尝试: 2 已通过: 1 难度: 8 上传者: 标签>CF2400扫描线线段树图论搜索数据结构

[Bulgarian2022春季赛]Rain

题目描述

你可以控制云层。现在你正在观察一片大小为 N×MN \times M 的沙漠,并将其划分成边长为 11 的方格。

每个格子要么是空的沙地,要么有人类居住。当两个边相邻的格子里都有人时,我们称它们属于同一个部落。换句话说,一个部落就是这张表格中由有人格子构成的一个连通块。

你想给尽可能多的部落降雨供水。你可以选择创建一个大小为 H×WH \times W 的云层,其左上角位于某个格子的正上方,且云层边平行于表格的坐标轴。随后会下雨,所有被这个云层覆盖到的部落都会得到水。

一个部落不需要完全位于云层下方;只要该部落中至少有一个格子位于云层下方,它就会获得供水。

请你求出:最多能让多少个部落获得供水。

输入格式

第一行输入四个整数 N,M,H,WN, M, H, W,表示表格的大小以及云层的大小。

接下来 NN 行,每行输入 MM 个字符,字符之间以一个空格分隔。每个字符描述一个格子:

  • 'x'(小写字母 x)表示该格中有人;
  • '.' 表示该格为空。

输出格式

输出一行一个整数,表示问题的答案。

数据范围

  • 1N,M30001 \le N, M \le 3000
  • 1WN1 \le W \le N
  • 1HM1 \le H \le M

子任务与评分

要获得某个子任务的分数,你的程序必须通过该子任务中的所有测试。

子任务 分值 N,MN, M \le 其他限制
1 8 50
2 10 500
3 9 3000 每个部落恰好只包含一个格子
4 11 部落总数不超过 20
5 部落总数不超过 400
6 14 每个部落最多包含 20 个格子
7 37

样例

输入

10 12 4 5
. x x . . x . . x x x .
. x . . x x . . . x x x
x x x . . x x x x . . .
. . x x . . . . . . x x
x . . x x x x . . . x x
x x . x . . x x . x x .
. x . . x x . x x . x .
. . x . . x x . . x x .
x x x . . . x x x x . .
. x . . x x . . . x . x

输出

4

样例说明

一个可行的云层放置方式是:令其左上角位于第 5 行第 1 列对应格子的上方。