CF225C Barcode

题目描述

你有一张 $n\times m$ 像素的图片,每个像素可以是白色或黑色。你的任务是通过尽可能少的像素变色操作,将这幅图片变成“条形码图片”。 一幅图片被称为“条形码图片”,当且仅当满足以下两个条件: - 每一列内的所有像素颜色必须相同。 - 每一组连续若干列颜色相同的“纵向单色条带”的宽度,必须不少于 $x$ 列且不多于 $y$ 列。换句话说,把所有相邻、颜色相同的列分成若干组,每组的大小不得小于 $x$,也不得大于 $y$。

输入格式

第一行包含四个用空格分隔的整数 $n$、$m$、$x$ 和 $y$($1\leq n,m,x,y\leq 1000$,且 $x\leq y$)。 接下来有 $n$ 行,每行包含恰好 $m$ 个字符,描述初始图片。字符 "." 表示白色像素,"#" 表示黑色像素。输入不会包含除了 "." 和 "#" 以外的其它字符。

输出格式

输出一行,一个整数,表示最少需要变色的像素数量。保证一定存在方案。

说明/提示

第一个样例,经过操作后,图片可以变成如下形式: ``` .##.. .##.. .##.. .##.. .##.. .##.. ``` 第二个样例,经过操作后,图片可以变成如下形式: ``` .#.#. .#.#. ``` 由 ChatGPT 5 翻译