1231 cadena mínimo Problema X representa - problemas para conseguir - para lograr el procesamiento de cadenas -C ++

Problema X: la representación de cordaje mínimo

Plazo: 1 Sec límite de memoria: 32 MB
presentados: 129 solución: 36

título Descripción

La cadena de una longitud len de un círculo, entonces cualquier carácter como punto de partida, tendrá una longitud len de la cadena, la representación de cadena es la más pequeña del orden mínimo que todas las cadenas en el diccionario.
Tal como alabala cadena, después de que un círculo, formado de acuerdo con las normas anteriores de la siguiente nueva cadena:
labalaa
abalaal
balaala
alaalab
laalaba
aalabal
en que toda la cadena de siete es lexicográficamente más pequeña aalabal, su primera la posición de una carta en la cadena original es 6. (Posición a partir de 0 conteo)
ahora se da una cadena, a averiguar la ubicación de su primera letra representa el más pequeño de la cadena original. Si la representación de cadena mínimo de una pluralidad, la salida de la primera letra en la posición mínima de la cadena original.

entrada

La primera línea de la entrada es un número entero t, t fijada expresada de datos de prueba.
Siguiente T líneas de un primer número entero de entrada l (5 <= l <= 100 000), indica la longitud de la cadena, y luego entran en una cadena que representa la cadena original. Cadena contiene sólo letras minúsculas.

exportación

Para cada posición de la primera letra de la entrada y la salida de la cadena original representado por el más pequeño de la cadena original.

de entrada de muestra  Copia

2 
6 baabaa 
7 alabala

Un ejemplo de salida  de copia

1 
6

código

consejos:

Esta cuestión es todavía entiende? Me tomó algún tiempo para entender esta pregunta, y finalmente encontró:

  • Entre las cadenas pueden ser más grandes que el tamaño (ABCE y abd: abce, el final de la tercera alineación abd>)
  • Uniendo dos cadenas idénticas puede jugar un tiempo de ciclo de desplazamiento de la matriz (por ejemplo: ABCD y abcd = ABCDABCD)
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;

int main(){
    
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        string s;
        cin >>s;

        int len;
        len=(int)s.size();

        s+=s;//就循环了

        string sans;
        sans=s.substr(0,len);

        int ans;
        ans=0;

        char cmin  ;
        cmin='z';
        for(int i = 0;i < len;i++){
            cmin=min(cmin,s[i]);
        }
        for(int i = 1;i < len;i++){
            if(s[i]==cmin){
                if(sans>s.substr(i,len)){
                    sans=s.substr(i,len);
                    ans=i;
                }

            }
        }
        cout<<ans<<endl;

    }
    return 0;
}

 

Publicado 20 artículos originales · ganado elogios 0 · Vistas 115

Supongo que te gusta

Origin blog.csdn.net/weixin_31789689/article/details/104736735
Recomendado
Clasificación