蓝桥杯2023年第十四届省赛真题-更小的数--题解

2023-09-17 09:58:59

目录

蓝桥杯2023年第十四届省赛真题-更小的数

题目描述

输入格式

输出格式

样例输入

样例输出

提示

【思路解析】

【代码实现】


蓝桥杯2023年第十四届省赛真题-更小的数

时间限制: 3s 内存限制: 320MB 提交: 895 解决: 303

题目描述

蓝桥杯2023年第十四届省赛真题-更小的数

小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串,下标从 0 到 n − 1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 numnew 满足条件 numnew < num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 num 中的位置不完全相同我们就视作是不同的方案。

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

输入格式

输入一行包含一个长度为 n 的字符串表示 num(仅包含数字字符 0 ∼ 9),

从左至右下标依次为 0 ∼ n − 1。

输出格式

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

样例输入

复制

210102

样例输出

复制

8

提示

一共有 8 种不同的方案:

1)所选择的子串下标为 0 ∼ 1 ,反转后的 numnew = 120102 < 210102 ;

2)所选择的子串下标为 0 ∼ 2 ,反转后的 numnew = 012102 < 210102 ;

3)所选择的子串下标为 0 ∼ 3 ,反转后的 numnew = 101202 < 210102 ;

4)所选择的子串下标为 0 ∼ 4 ,反转后的 numnew = 010122 < 210102 ;

5)所选择的子串下标为 0 ∼ 5 ,反转后的 numnew = 201012 < 210102 ;

6)所选择的子串下标为 1 ∼ 2 ,反转后的 numnew = 201102 < 210102 ;

7)所选择的子串下标为 1 ∼ 4 ,反转后的 numnew = 201012 < 210102 ;

8)所选择的子串下标为 3 ∼ 4 ,反转后的 numnew = 210012 < 210102 ;

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

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

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

【思路解析】

遍历所有可能性,对于一个子串 i -- j,有3种情况。

(1)如果str[i] > str[j],可以交换。

(2) 如果str[i] < str[j],不可以交换。

(3)如果str[i] ==  str[j],则考虑 子串 i+1 --- j-1,可不可以被交换,如果可以交换,则原子串可以交换,否则不可以被交换。

【代码实现】

import java.util.Scanner;

/**
 * @ProjectName: study3
 * @FileName: Ex2
 * @author:HWJ
 * @Data: 2023/9/17 9:22
 */
public class Ex2 {
    static int ans = 0;
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String s = input.next();
        char[] str = s.toCharArray();
        for (int right = 1; right < str.length; right++) {
            for (int left = 0; left < right; left++) {
                int L = left + 1;
                int R = right - 1;
                boolean loop = false;
                while (L < R){
                    if(str[L] > str[R]){
                        loop = true;
                        break;
                    } else if (str[L] < str[R]) {
                        break;
                    }else {
                        L += 1;
                        R -= 1;
                    }
                }
                if (str[left] > str[right] || (loop && str[left] == str[right])){
                    ans++;
                }
            }
        }
        System.out.println(ans);
    }


}

更多推荐

Python与数据分析--Matplotlib-2

目录1.写在文前2.实例1--武汉新冠趋势图3.简单散点图实例4.灵活散点图实例5.饼图操作实例1.写在文前"""Matplotlib库我们大致已经学完了,但是缺乏一定的实战经验。今天我们就来进行一下matplotlib的实战操作。"""#导入对应的库函数importnumpyasnpimportmatplotlib.

day40 设计模式、jdk8新特性

一、代理模式为其他对象提供一种代理控制此对象的访问若一个对象不适合直接引用另一个对象,代理对象在客户端和目标对象之间起到中介作用组成:抽象角色:通过接口抽象类真实角色实现了哪些方法代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法可以附加自己的操作真实角色:实现抽象角色,定义业务逻辑,供

【Redis 多机服务的简单认识】

目录主从同步哨兵模式集群服务随着业务的不断发展,单机Redis的性能已经不能满⾜我们的需求了,此时我们需要将单机Redis扩展为多机服务,Redis多机服务主要包含以下3个内容:Redis主从同步Redis哨兵模式Redis集群服务(Redis3.0新增功能)主从同步主从同步(主从复制)是Redis⾼可⽤服务的基⽯,也

OpenCV(三十八):二维码检测

1.二维码识别原理功能图形:位置探测图形:通常,二维码中有三个位置探测图形,呈现L型或大角度十字架形状,分布在二维码的三个角上,用于帮助扫描设备定位二维码的位置和方向。位置探测图形分隔符:帮助扫描设备区分位置探测图形和二维码的数据区域。计算模式:通常是一个小的正方形图案,用于校准扫描设备以捕捉和解码二维码的图像。对齐标

jQuery 框架学习笔记(基础)

WhatjQuery是一种快速、简洁跨游览器的JavaScript函数库,其宗旨是“Writeless,Domore”,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。注意:jQuery不是将所有的JS封装,只是有选择性的封装

观察者模式 & 发布-订阅模式(设计模式与开发实践 P8)

文章目录观察者模式运用实现观察者模式定义:他用来定义对象之间一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖他的对象都会得到通知运用如果我们使用过DOM上的事件函数,那就接触过观察者模式document.body.addEventListener("click",function(){console.log("

HTML 知识扫盲

写在前面HTML是一门超文本标记语言,不管你听没听说过HTML,但在网上冲浪的途中你无时不刻都在与它接触,他遍布在每个你看得到的互联网的角落。其实对于笔者而言,我已经断断续续地学习过这门语言,经过时间的磋磨,所剩知识也是寥寥无几,这次借此机会复盘并总结一下HTML,当然在这里我不会将HTML语言的细节全盘拖出,只是总结

Android Fragment动画实现

在Android中,你可以使用FragmentTransaction来实现Fragment的动画效果。这允许你在添加、替换或移除Fragment时应用动画,从而改善用户体验。下面是如何实现Fragment动画的基本步骤:1.创建两个Fragment:首先,创建两个Fragment,例如FragmentA和Fragmen

TS同时打包和监视所有ts文件或只指定ts文件

当我们项目中ts文件较多时,我们如何直接打包所有ts文件为js文件?而不是使用tsc文件名一个一个去打包文件一、配置tsconfig.json文件创建一个tsconfig.json文件,该文件中不需要配置任何信息二、控制台输入打包命令在控制台输入如下代码:tsc三、对所有ts文件进行监听但是我们并没有对文件进行监听,修

Linux各种命令-查询篇

目录查看文件内容查看存储空间查看python安装目录查Ubuntu版本查看所有文件(含隐藏文件)查IP查看内存使用情况查看GPU使用情况查看CPU使用情况​​​​​​​查看文件内容cat[选项][文件...]-n:显示行号。-b:显示非空行号。-s:合并空白行。-E:在每行结尾添加$符号。-T:将制表符显示为^I。-v

交换机端口镜像详解

交换机端口镜像是一种网络监控技术,它允许将一个或多个交换机端口的网络流量复制并重定向到另一个端口上,以便进行流量监测、分析和记录。通过端口镜像,管理员可以实时查看特定端口上的流量,以进行网络故障排查、安全审计和性能优化。以下是关于交换机端口镜像的详细介绍:工作原理:交换机端口镜像通过在交换机的配置中指定源端口和目标端口

热文推荐