CF1279F New Year and Handle Change

题目描述

新年快到了,所以是时候在 codeforces 上更改用户名了。Mishka 想要更改自己的用户名,但又希望大家不要忘记他是谁。 为此,他只允许更改字母的大小写。更正式地说,在一次用户名更改操作中,他可以选择用户名的任意一个长度为 $l$ 的连续子串 $[i; i + l - 1]$,并对该子串内的所有字母统一应用 tolower 或 toupper 操作(即将所有大写字母变为对应的小写字母,或反之)。所有操作的长度 $l$ 都是固定的。 由于 codeforces 不允许频繁更改用户名,Mishka 最多只能进行 $k$ 次这样的操作。请问在经过最优的操作序列后,$min(lower, upper)$ 的最小值是多少?其中 $lower$ 表示用户名中小写字母的数量,$upper$ 表示大写字母的数量。

输入格式

输入的第一行包含三个整数 $n, k, l$($1 \le n, k, l \le 10^6, l \le n$),分别表示用户名的长度、最多允许的操作次数以及每次操作的子串长度。 第二行包含一个长度为 $n$ 的字符串 $s$,由大小写拉丁字母组成,表示 Mishka 的用户名。

输出格式

输出一个整数,表示在最多进行 $k$ 次操作后,$min(lower, upper)$ 的最小可能值。

说明/提示

由 ChatGPT 4.1 翻译