苏苏在上网某某和谐网站的时候,突然弹出一个窗口,上面写着:
CSDN, Adobe 等网站的用户数据库都被人拖走啦,你还敢在多个网站使用同一个密码吗?快来使用我们的随机密码生成器吧!
于是苏苏来到了一个奇怪的网站,上面有一个巨黑的输入框,下面还写着一些小字:
这是一个随机密码生成器,请在上方输入命令。
聪明的苏苏很快就推断出了这个生成器是如何工作的:
- 这个系统可以根据你的模板字符串生成相应格式的随机密码;
- 模板字符串是由若干条格式字符串连接而成,一个格式字符串是由一个字符加上一个正整数来表示的;
- 格式字符串一共有三种类型。字符 'A' 表示大写字母,字符 'a' 表示小写字母,字符 '.'(一个英文句点)表示特殊符号;
- 每种类型的格式只会被描述一次,即不存在 "A5A10" 这种模板字符串。
- 例如,"A5" 表示 5 个大写字母,"a12.2" 表示 12 个小写字母以及 2 个特殊符号,要注意随机密码中各个字符的位置和格式字符串的位置无关。
另外,特殊符号由以下字符组成:
!@#$\%^&*()_-<>,./?
苏苏想要验证一下网站生成的密码是否符合相应的规则,他决定把这个验证程序交给你来写。
输入格式
一个整数 T,表示有多少组测试数据。
对于每组测试数据,首先给出一行长度不超过 100 的非空字符串 S,表示一个合法的模板字符串。
接下来的一行,给出一个整数 N (1 <= N <= 20),表示生成的密码数量。然后的 N 行,每行给出一个长度在 0 到 200 之间的字符串 Ai,表示生成的密码。字符串中的所有字符的 ASCII 值均在 32 到 126 之间。
输出格式
对于每组测试数据的每条密码,如果该密码是一个符合规则的随机密码,则输出 "Yes",否则输出 "No",注意输出的内容不含引号。
样例输入
2
a2
2
ab
nokia
a2A2
3
AaBb
aaaB
AAAAbbbb
样例输出
Yes No Yes No
No
case都能过,不知道提交后为嘛是Output Limit Exceeded
#include <iostream> #include <cstdio> #include <string> using namespace std; int main(){ //freopen("G:\\input.in", "r", stdin); int t, n, pos1, pos2, pos3; string s, s1; string sp = "!@#$\\%^&*()_-<>,./?"; cin >> t; while (t--){ cin >> s >> n; pos1 = s.find('A'); pos2 = s.find('a'); pos3 = s.find('.'); int cnt1 = 0, cnt2 = 0, cnt3 = 0; if (pos1 != string::npos){ for (int i = pos1 + 1; i < s.size(); i++){ if (s[i] >= '0' && s[i] <= '9'){ cnt1 = cnt1 * 10 + s[i] - '0'; } else break; } } if (pos2 != string::npos){ for (int i = pos2 + 1; i < s.size(); i++){ if (s[i] >= '0' && s[i] <= '9'){ cnt2 = cnt2 * 10 + s[i] - '0'; } else break; } } if (pos3 != string::npos){ for (int i = pos3 + 1; i < s.size(); i++){ if (s[i] >= '0' && s[i] <= '9'){ cnt3 = cnt3 * 10 + s[i] - '0'; } else break; } } while (n--){ cin >> s1; int k1 = 0, k2 = 0, k3 = 0; for (int i = 0; i < s1.size(); i++){ if (s1[i] >= 'A' && s1[i] <= 'Z') k1++; else if (s1[i] >= 'a' && s1[i] <= 'z') k2++; else if (sp.find(s1[i]) != string::npos) k3++; } if ((s1.size()>200) || (k1 + k2 + k3 != s1.size()) || (k1 != cnt1) || (k2 != cnt2) || (k3 != cnt3)){ printf("No\n"); } else printf("Yes\n"); } } return 0; }