• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sn-genuine
博客园    首页    新随笔    联系   管理    订阅  订阅

洛谷P10906 [蓝桥杯 2024 国 B] 合法密码

P10906 [蓝桥杯 2024 国 B] 合法密码

题目描述

小蓝正在开发自己的 OJ 网站。他要求网站用户的密码必须符合以下条件:

  1. 长度大于等于 \(8\) 个字符,小于等于 \(16\) 个字符。
  2. 必须包含至少 \(1\) 个数字字符和至少 \(1\) 个符号字符。

例如 lanqiao2024!、+-*/0601、8((>w<))8 都是合法的密码。

而 12345678、##**##**、abc0!#、lanqiao20240601!? 都不是合法的密码。

请你计算以下的字符串中,有多少个子串可以当作合法密码?只要两个子串的开头字符和末尾字符在原串中的位置不同,就算作不同的子串。

字符串为:

kfdhtshmrw4nxg#f44ehlbn33ccto#mwfn2waebry#3qd1ubwyhcyuavuajb#vyecsycuzsmwp31ipzah#catatja3kaqbcss2th

输入格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输出格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

题目链接

https://www.luogu.com.cn/problem/P10906

解题思路

  1. 函数is判断是否满足数字和符号要求,调用isdigit和isalpha
  2. main函数中调用substr截取子串满足条件ans+1即可

代码实现

// 模拟 
#include<bits/stdc++.h>
using namespace std;
int ans;
bool is(string t){
	bool flag=false;
	for(auto ch:t){
		if(isdigit(ch))flag=true;
	}
	if(!flag)return false;
	for(auto ch:t){
		if(isdigit(ch)||isalpha(ch))continue;
		return true;
	}
	return false;
} 
int main()
{
	string str;cin>>str;
	for(int i=0;i<str.size();i++){
		for(int len=8;len<=16;len++){
			string tmp=str.substr(i,len);
			if(is(tmp))ans++;
		}
	}
	cout<<ans;
	return 0;
}
posted on 2026-09-20 17:28  SobNov  阅读(11)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3