苏苏在上网某某和谐网站的时候,突然弹出一个窗口,上面写着:
CSDN, Adobe 等网站的用户数据库都被人拖走啦,你还敢在多个网站使用同一个密码吗?快来使用我们的随机密码生成器吧!
于是苏苏来到了一个奇怪的网站,上面有一个巨黑的输入框,下面还写着一些小字:
这是一个随机密码生成器,请在上方输入命令。
聪明的苏苏很快就推断出了这个生成器是如何工作的:
另外,特殊符号由以下字符组成:
!@#$\%^&*()_-<>,./?
苏苏想要验证一下网站生成的密码是否符合相应的规则,他决定把这个验证程序交给你来写。
一个整数 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; }