1 条题解
-
0
自动搬运
来自洛谷,原作者为

封禁用户
None搬运于
2025-08-24 23:02:24,当前版本为作者最后更新于2024-08-24 15:30:42,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P10906[蓝桥杯 2024 国B] 合法密码
题目链接:P10906
题目大意
在给定的字符串中寻找符合要求的字符串,这些字符串需要满足以下两个要求:
- 长度大于等于 个字符,小于等于 个字符。
- 必须包含至少 个数字字符和至少 个符号字符。
样例分析
本题提交答案即可,即把正确的答案提交上去即可,不需要提交代码。
思路构建
很明显,一个由 个字符组成的字符串想要一一枚举出来极其不现实,既容易多数漏数也容易重复数,因此还是需要编写一个代码来实现。
这个代码其实很简单,从字符串第一个数开始,这个数保持不变,然后找出所有长度为 ~ 之间的所有字符串(这里就是满足第一个条件),接着看这些字符串是否满足第二个条件,如果满足ans++,不满足则不加。
重复上面这个步骤直到还剩个字符时停止。
代码展示
本题答案为 ,直接输出这个数即可。
这里给出部分代码,仅供参考。
void solve() { string s; cin >> s; int n = s.size(); auto check = [&](string t) -> bool { bool fl = 0; for(auto c : t) if(isdigit(c)) fl = 1; if(!fl) return false; for(auto c : t) { if(isdigit(c) || isalpha(c)) continue; return true; } return false; }; int cnt = 0; for(int i = 0; i < n; i ++) { for(int len = 8; len <= 16; len ++) { if(i + len - 1 >= n) break; int l = i, r = i + len - 1; string s1 = s.substr(i, len); if(check(s1)) cnt ++; } } cout << cnt << endl; }
完结撒花
感谢您看到这里,如果您觉得有帮助麻烦您点个赞谢谢~
- 1
信息
- ID
- 10667
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者