当前位置: 首页 > article >正文

蓝桥杯3503 更小的数

问题描述

图片描述

小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串,下标从 0 到 n−1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。

小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 num_new​ 满足条件 num_new<num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 num 中的位置不完全相同我们就视作是不同的方案。

注意,我们允许前导零的存在,即数字的最高位可以是 0,这是合法的。

输入格式

输入一行包含一个长度为 n 的字符串表示 num(仅包含数字字符 0∼9),从左至右下标依次为 0∼n−1。

输出格式

输出一行包含一个整数表示答案。

样例输入

210102

样例输出

8

 

枚举所有子串,对每个子串 s[i..j],用双指针 i 和 j 从两端向中间移动,跳过相同字符,比较第一个不同的字符对,若 s[i] > s[j],则计数

#include<iostream>
#include<cstring>
using namespace std;const int N = 5e3+10;
string s;int ans;//判断子串 s[i..j] 的反转是否比原子串小
void check(int i, int j)
{//跳过相同字符while(s[i]==s[j] && i<j){i++;j--;}//如果所有字符都相同,则反转后子串与原串相同,直接返回 if(i>=j) return;//反转后的子串比原串小if(s[i]>s[j]) ans++;return;
}int main()
{cin>>s;int len = s.size();for(int i=0; i<len-1; ++i){for(int j=i+1; j<len; ++j)  //确保子串至少有两个字符{check(i, j);}}cout<<ans;return 0;
}
http://www.lryc.cn/news/2386713.html

相关文章:

  • 高并发下使用防重表做防重案例
  • 算法-全排列
  • 最好用的wordpress外贸主题
  • 2025 河北ICPC( D. 金泰园(二分)-- C.年少的誓约(公式转化))
  • mongodb语法$vlookup性能分析
  • 晶圆隐裂检测提高半导体行业效率
  • 临床试验中的独立数据监查委员会
  • 在 LangChain 中集成 Mem0 记忆系统教程
  • PTA练习题
  • 华润电力招聘认知能力测评及性格测评真题题库考什么?
  • Maven Profile在插件与依赖中的深度集成
  • 手机平板等设备租赁行业MDM方案解析
  • 【前端】使用HTTPS
  • Python应用“面向对象”小练习
  • 如何调试CATIA CAA程序导致的CATIA异常崩溃问题
  • SQL查询效率以及索引设计
  • day37打卡
  • 分布式缓存:证明分布式系统的 CAP 理论
  • 软件设计师“面向对象设计”真题考点分析——求三连
  • vue项目webpack、vite、rollup、parcel四种构建工具对比
  • 系统架构中的限流实践:构建多层防护体系(二)
  • Linux常见设备
  • AI大模型学习二十八、ACE-Step:生成式AI音乐大模型简介与安装(一)
  • AI时代新词-AI芯片(AI - Specific Chip)
  • 【多智能体系统开发框架AutoGen解析与实践】
  • 接口性能测试-工具JMeter的学习
  • python如何离线安装pandas,numpy
  • Java Swing 自定义JOptionPane
  • 项目亮点 封装request请求模块
  • 通过 Terraform 构建您的第一个 Azure Linux 虚拟机