#P9232. [蓝桥杯 2023 省 A] 更小的数(Smaller Number)

0

[蓝桥杯 2023 省 A] 更小的数(Smaller Number)

[蓝桥杯 2023 省 A] 更小的数(Smaller Number)

题目描述

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

小蓝想要使选出的子串反转并放回原位置后得到的新数字 numnewnum_{new} 满足 numnew<numnum_{new} < num。请你帮他计算一共有多少种不同的子串选择方案(只要两个子串在 numnum 中的起止位置不完全相同就视作不同的方案)。

注意:允许前导零的存在,即数字的最高位可以是 0。

输入格式

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

输出格式

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

样例输入 #1

210102

样例输出 #1

8

数据范围

【样例说明】

一共有 88 种不同的方案:

  1. 所选择的子串下标为 0∼10\sim1,反转后的 numnew=120102<210102num_{new} = 120102 < 210102;
  2. 所选择的子串下标为 0∼20\sim2,反转后的 numnew=012102<210102num_{new} = 012102 < 210102;
  3. 所选择的子串下标为 0∼30\sim3,反转后的 numnew=101202<210102num_{new} = 101202 < 210102;
  4. 所选择的子串下标为 0∼40\sim4,反转后的 numnew=010122<210102num_{new} = 010122 < 210102;
  5. 所选择的子串下标为 0∼50\sim5,反转后的 numnew=201012<210102num_{new} = 201012 < 210102;
  6. 所选择的子串下标为 1∼21\sim2,反转后的 numnew=201102<210102num_{new} = 201102 < 210102;
  7. 所选择的子串下标为 1∼41\sim4,反转后的 numnew=201012<210102num_{new} = 201012 < 210102;
  8. 所选择的子串下标为 3∼43\sim4,反转后的 numnew=210012<210102num_{new} = 210012 < 210102。

【评测用例规模与约定】

对于 20%20\% 的评测用例,1≤n≤1001 \le n \le 100;

对于 40%40\% 的评测用例,1≤n≤10001 \le n \le 1000;

对于所有评测用例,1≤n≤50001 \le n \le 5000。

知识点与难度

本题涉及的知识点从属于 CSP-J,难度(CF Rating):1250。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例及最小边界测试
1 20 3~8 1≤n≤1001 \le n \le 100
2 15 9~11 Hack 数据:严格递增串(答案 00)、全相同数字串(答案 00)、严格递减串(答案 n(n−1)2\frac{n(n-1)}{2})
3 30 12~20 500≤n≤2500500 \le n \le 2500
4 25 21~25 n=5000n = 5000 满规模区间递推测试

出处:原题链接