#GP26558. 密码强度(password)
密码强度(password)
题目描述
小 Y 在注册一个账号,他在输入了一个长度为 的字符串 (包含数字和大小写英文字母)作为密码后,才看到密码的强度要求:
- 长度在 至 之间(包含 和 )。
- 至少包含一个数字。
- 至少包含一个小写英文字母。
- 至少包含一个大写英文字母。
小 Y 现在每次可以执行以下操作中的一个:
- 删除任意一个字符。
- 在任意位置添加任意一个字符。
小 Y 想知道他最少需要进行多少次操作可以使密码满足要求。数据保证一定存在一种方案可以使得其满足要求。
输入格式
从文件 password.in 中读入数据。
本题有多组测试数据。
第一行一个整数 ,表示数据组数。
对于每组数据:
第一行三个整数 。
第二行一个字符串 。(当 时,第二行是一个空行)
输出格式
输出到文件 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 ,一共进行了 次操作。因为原字符串不包含大写英文字母和数字,所以至少需要添加 个字符,因此这就是最优解法。
对于第二组数据:
原字符串只不满足长度要求,需要添加任意 个字符,即 次操作。
对于第三组数据:
可以删掉 elish 后再添加一个 A 和一个 1 ,一共进行了 次操作。值得注意的是只删掉 个字符不够是因为 A 和 1 也会占据 个字符长度。
数据规模与约定
本题共 个测试点,每个 分。
| 测试点编号 | 特殊性质 |
|---|---|
| A | |
| B | |
| 无 |
特殊性质 A: 至少包含一个数字、一个大写英文字母和一个小写英文字母。
特殊性质 B: 包含且仅包含数字。
对于全部数据,保证: , , 。