2118 - Minim Lexicografic
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=0
→ ALFABET
k=1
→ LFABETA
k=2
→ FABETAL
k=3
→ ABETALF
k=4
→ BETALFA
k=5
→ ETALFAB
k=6
→ TALFABE
Ș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>