2118 - Minim Lexicografic

From Bitnami MediaWiki
Revision as of 12:45, 17 December 2023 by Raul (talk | contribs) (Pagină nouă: Se consideră un șir de caractere format din <code>N</code> caractere literă mare ale alfabetului englez. Șirul poate fi rotit circular spre stânga cu <code>k</code> poziții. = Cerință = Să se determine poziția minimă <code>k</code> 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 = Fișierul de intrare <code>minlex.in</code> conține pe prima linie șirul de caractere. = Dat...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>