Buscar un nuevo tipo de carácter del tipo especificado

Buscar un nuevo tipo de carácter del tipo especificado

Descripción del Título

La definición del nuevo tipo de carácter es la siguiente:
1. El nuevo tipo de carácter es una cadena de caracteres con una longitud de 1 o 2.

  1. La expresión solo puede ser letras minúsculas, por ejemplo, "e"; también puede ser letras mayúsculas + letras minúsculas, por ejemplo, "Ab"; también puede ser letras mayúsculas + letras mayúsculas, por ejemplo, "DC".

Ahora, dada una cadena str, str debe ser el resultado de la combinación correcta de varios tipos nuevos de caracteres. Por ejemplo, "eaCCBi" se compone de nuevos caracteres de tipo "e", "a", "CC" y "Bi". Dado un entero k, que representa la posición en str. Devuelva el nuevo carácter de tipo en la posición k.

Ingrese una descripción:

La entrada contiene dos líneas. La primera línea contiene dos números enteros n, k (1 ≤ n ≤ 1 0 5, 0 ≤ k ≤ n - 1) n, k (1 \ leq n \ leq 10 ^ 5,0 \ leq k \ leq n-1)n ,k ( 1norte1 05 ,0knorte-1 ) , n representa la longitud de la cadena str y la segunda línea contiene una cadena que representa la cadena str.

Descripción de salida:

La salida contiene un nuevo tipo de carácter especificado por la posición k.

Ejemplo 1
entrar
11 7
aaABCDEcBCg
Salida
Ec

responder:

Simulación de cuerdas. La solución básica es recorrer de adelante hacia atrás, y saber qué personaje es cuando alcanzas la posición k. Hay otro enfoque novedoso, comenzando desde la posición k-1 y atravesando hacia la izquierda, deteniéndose en la primera letra minúscula y contando el número de letras mayúsculas num:

  • Si num es un número impar, el nuevo carácter de tipo debe ser str [k-1, k];
  • Si str [k] es una letra mayúscula, el nuevo carácter de tipo es str [k, k + 1];
  • De lo contrario, el nuevo carácter de tipo es str [k].

Nota: La k en el título comienza en 0.

Código:
#include <cstdio>
#include <cstring>

using namespace std;

const int N = 100010;

char s[N];
int n, k;

int main(void) {
    
    
    scanf("%d%d", &n, &k);
    scanf("%s", s);
    int ans = 0;
    for (int i = k - 1; i >= 0; --i) {
    
    
        if (s[i] >= 'a' && s[i] <= 'z') break;
        ++ans;
    }
    if (ans & 1) printf("%c%c\n", s[k - 1], s[k]);
    else if (s[k] >= 'A' && s[k] <= 'Z') printf("%c%c\n", s[k], s[k + 1]);
    else printf("%c\n", s[k]);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/MIC10086/article/details/108961760
Recomendado
Clasificación