Copa Lanqiao 2023 14a Competencia Provincial Preguntas reales - Números más pequeños - Solución

Tabla de contenido

Copa Lanqiao 2023 14a Competencia Provincial Preguntas reales: números más pequeños

Descripción de la pregunta

Formato de entrada

Formato de salida

Entrada de muestra

Salida de muestra

pista

[Análisis de ideas]

【Código】


Copa Lanqiao 2023 14a Competencia Provincial Preguntas reales: números más pequeños

Límite de tiempo: 3 s Límite de memoria: 320 MB Envía: 895 Resuelve: 303

Descripción de la pregunta

Copa Lanqiao 2023 14a Competencia Provincial Preguntas reales: números más pequeños

Xiaolan tiene una cadena de longitud n y que consta solo de caracteres numéricos 0 ∼ 9, con subíndices de 0 a n − 1. Puedes considerarlo como un número decimal num con n dígitos. Xiaolan puede comenzar desde Seleccione una subcadena continua de num e invertir la subcadena, como máximo una vez. Xiaolan quiere invertir la subcadena seleccionada y luego colocarla en la posición original para obtener un nuevo número numnew que satisfaga la condición numnew < num. Ayúdelo a calcular cuántas opciones diferentes de selección de subcadenas hay. Siempre que las posiciones de la Dos subcadenas en num no son exactamente iguales, las consideramos soluciones diferentes.

Tenga en cuenta que permitimos la existencia de ceros a la izquierda, es decir, el bit más alto del número puede ser 0, lo cual es legal.

Formato de entrada

Ingrese una línea que contenga una cadena de longitud n que represente num (que contenga solo caracteres numéricos 0 ∼ 9),

Los subíndices de izquierda a derecha son 0 ∼ n − 1.

Formato de salida

Una línea de salida contiene un número entero que representa la respuesta.

Entrada de muestra

Copiar

210102

Salida de muestra

Copiar

8

pista

Hay 8 opciones diferentes en total:

1) El índice de subcadena seleccionado es 0 ∼ 1, y el número invertido = 120102 <210102;

2) El índice de subcadena seleccionado es 0 ∼ 2, y el numnew invertido = 012102 <210102;

3) El índice de subcadena seleccionado es 0 ∼ 3, y el número invertido = 101202 <210102;

4) El índice de subcadena seleccionado es 0 ∼ 4, y el número invertido = 010122 <210102;

5) El índice de subcadena seleccionado es 0 ∼ 5, y el número invertido = 201012 <210102;

6) El índice de subcadena seleccionado es 1 ∼ 2, y el número invertido = 201102 <210102;

7) El subíndice de subcadena seleccionado es 1 ∼ 4, y el numnew invertido = 201012 <210102;

8) El índice de subcadena seleccionado es 3 ∼ 4, y el número invertido = 210012 <210102;

Para el 20% de los casos de evaluación, 1 ≤ n ≤ 100;

Para el 40% de los casos de evaluación, 1 ≤ n ≤ 1000;

Para todos los casos de evaluación, 1 ≤ n ≤ 5000.

[Análisis de ideas]

Atraviese todas las posibilidades. Para una subcadena i - j, hay 3 situaciones.

(1) Si str[i] > str[j], se puede intercambiar.

(2) Si str[i] < str[j], el intercambio no es posible.

(3) Si str [i] == str [j], considere si la subcadena i + 1 --- j-1 se puede intercambiar, si se puede intercambiar, entonces la cadena atómica se puede intercambiar, de lo contrario no se puede intercambiar. intercambiado.

【Código】

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);
    }


}

Supongo que te gusta

Origin blog.csdn.net/weixin_73936404/article/details/132939396
Recomendado
Clasificación