#GP26558. 密码强度(password)

    ID: 2954 传统题 文件IO:password 1000ms 256MiB 尝试: 6 已通过: 5 难度: 1 上传者: 标签>基础算法贪心其它技巧分类讨论

密码强度(password)

题目描述

小 Y 在注册一个账号,他在输入了一个长度为 nn 的字符串 aa (包含数字和大小写英文字母)作为密码后,才看到密码的强度要求:

  • 长度在 sstt 之间(包含 sstt )。
  • 至少包含一个数字。
  • 至少包含一个小写英文字母。
  • 至少包含一个大写英文字母。

小 Y 现在每次可以执行以下操作中的一个:

  • 删除任意一个字符。
  • 在任意位置添加任意一个字符。

小 Y 想知道他最少需要进行多少次操作可以使密码满足要求。数据保证一定存在一种方案可以使得其满足要求。

输入格式

从文件 password.in 中读入数据。

本题有多组测试数据。

第一行一个整数 TT ,表示数据组数。

对于每组数据:

第一行三个整数 n,s,tn,s,t

第二行一个字符串 aa 。(当 n=0n=0 时,第二行是一个空行)

输出格式

输出到文件 password.out 中。

对于每组数据:

输出一行一个整数表示答案。

样例

3
5 3 10
abcde
3 8 10
Aa1
8 3 5
lovelish
2
5
7
2
0 3 5

0 7 8
3
7

样例解释

对于样例 11

对于第一组数据:

可以在末尾添加一个 A 和一个 1 ,一共进行了 22 次操作。因为原字符串不包含大写英文字母和数字,所以至少需要添加 22 个字符,因此这就是最优解法。

对于第二组数据:

原字符串只不满足长度要求,需要添加任意 55 个字符,即 55 次操作。

对于第三组数据:

可以删掉 elish 后再添加一个 A 和一个 1 ,一共进行了 77 次操作。值得注意的是只删掉 33 个字符不够是因为 A1 也会占据 22 个字符长度。

数据规模与约定

本题共 2020 个测试点,每个 55 分。

测试点编号 特殊性质
131\sim3 n=0n=0
484\sim8 A
9159\sim15 B
162016\sim20

特殊性质 A: aa 至少包含一个数字、一个大写英文字母和一个小写英文字母。

特殊性质 B: aa 包含且仅包含数字。

对于全部数据,保证: 1T101\le T\le 100n100\le n\le 101st10,t31\le s\le t\le 10,t\ge 3