2118 - Minim Lexicografic

From Bitnami MediaWiki

Se consideră un șir de caractere format din N caractere literă mare ale alfabetului englez. Șirul poate fi rotit circular spre stânga cu k poziții.

Cerință[edit | edit source]

Să se determine poziția minimă k cu care poate fi rotit circular spre stânga șirul inițial astfel încât șirul obținut să fie minim lexicografic.

Date de intrare[edit | edit source]

Fișierul de intrare minlex.in conține pe prima linie șirul de caractere.

Date de ieșire[edit | edit source]

Fișierul de ieșire minlex.out va conține pe prima linie numărul natural k.

Restricții și precizări[edit | edit source]

  • 2 ≤ N ≤ 100.000

Exemplu:[edit | edit source]

minlex.in

ALFABET

minlex.out

3

Explicație[edit | edit source]

Rotațiile posibile:

k=0ALFABET

k=1LFABETA

k=2FABETAL

k=3ABETALF

k=4BETALFA

k=5ETALFAB

k=6TALFABE

Șirul minim lexicografic obținut: ABETALF, pentru o rotație cu 3 poziții spre stânga a șirului inițial.

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> import sys

sys.stdin = open('minlex.in', 'r') sys.stdout = open('minlex.out', 'w')

s = input() sir = [] * (2 * len(s)) i = 0 h = len(s) while s[i] != '\0':

   sir[i] = s[i]
   sir[h + i] = s[i]
   i += 1

iva = 0 for i in range(h):

   if .join(sir[i:]) < s:
       s = .join(sir[i:])
       iva = i

print(iva)

</syntaxhighlight>