2645 - minlex: Difference between revisions
Pagină nouă: Se consideră un cuvânt format numai din litere mici și un număr natural nenul '''K'''. ==Cerința== Să se determine cuvântul minim lexicografic obținut prin eliminarea a exact '''K''' litere din cuvântul inițial. ==Date de intrare== Programul citește de la tastatură numărul '''K''', apoi cuvântul. ==Date de ieșire== Programul va afișa pe ecran cuvântul rămas după eliminarea a exact '''K''' litere, minim lexicografic. ==Restricții și precizări== *'... |
No edit summary |
||
Line 20: | Line 20: | ||
*Literele rămase după eliminare nu-și pot schimba ordinea în cuvânt. | *Literele rămase după eliminare nu-și pot schimba ordinea în cuvânt. | ||
== | ==Exemplul 1:== | ||
;Intrare | ;Intrare | ||
Line 28: | Line 28: | ||
;Ieșire | ;Ieșire | ||
:Datele de intrare corespund restrictiilor impuse | |||
:info | :info | ||
==Exemplul 2:== | |||
;Intrare | |||
:0 | |||
;Ieșire | |||
:Datele de intrare nu corespund restrictiilor impuse | |||
==Rezolvare== | ==Rezolvare== | ||
Line 34: | Line 45: | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
# | def validare(litera_k, word): # functia de validare a datelor de intrare | ||
def elimina_litere( | if 1 > litera_k or litera_k >= len(word) or len(word) > 1000000: | ||
raise ValueError | |||
if not word.islower(): | |||
raise ValueError | |||
print("Datele de intrare corespund restrictiilor impuse\n") | |||
def elimina_litere(litera_k, word): # functia de rezolvare | |||
stiva = [] | stiva = [] | ||
for litera in word: | |||
for litera in | while litera_k > 0 and stiva and stiva[-1] > litera: | ||
while | |||
stiva.pop() | stiva.pop() | ||
litera_k -= 1 | |||
stiva.append(litera) | stiva.append(litera) | ||
while litera_k > 0: | |||
while | |||
stiva.pop() | stiva.pop() | ||
litera_k -= 1 | |||
return ''.join(stiva) | return ''.join(stiva) | ||
if __name__ == '__main__': | |||
try: | |||
k, cuvant = input("Introduceți numărul K și cuvântul, separate printr-un spațiu: ").split() | |||
k = int(k) | |||
k = int(k) | validare(k, cuvant) | ||
rezultat = elimina_litere(k, cuvant) | |||
print(str(rezultat) + '\n') | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 23:03, 14 November 2023
Se consideră un cuvânt format numai din litere mici și un număr natural nenul K.
Cerința[edit | edit source]
Să se determine cuvântul minim lexicografic obținut prin eliminarea a exact K litere din cuvântul inițial.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul K, apoi cuvântul.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran cuvântul rămas după eliminarea a exact K litere, minim lexicografic.
Restricții și precizări[edit | edit source]
- 3 ≤ lungimea cuvântului ≤ 1.000.000
- Cuvântul este format numai din litere mici ale alfabetului englez.
- 1 ≤ K < lungimea cuvântului
- Literele rămase după eliminare nu-și pot schimba ordinea în cuvânt.
Exemplul 1:[edit | edit source]
- Intrare
- 5 zyizxtnfo
- Ieșire
- Datele de intrare corespund restrictiilor impuse
- info
Exemplul 2:[edit | edit source]
- Intrare
- 0
- Ieșire
- Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validare(litera_k, word): # functia de validare a datelor de intrare
if 1 > litera_k or litera_k >= len(word) or len(word) > 1000000: raise ValueError if not word.islower(): raise ValueError print("Datele de intrare corespund restrictiilor impuse\n")
def elimina_litere(litera_k, word): # functia de rezolvare
stiva = [] for litera in word: while litera_k > 0 and stiva and stiva[-1] > litera: stiva.pop() litera_k -= 1 stiva.append(litera) while litera_k > 0: stiva.pop() litera_k -= 1 return .join(stiva)
if __name__ == '__main__':
try: k, cuvant = input("Introduceți numărul K și cuvântul, separate printr-un spațiu: ").split() k = int(k) validare(k, cuvant) rezultat = elimina_litere(k, cuvant) print(str(rezultat) + '\n') except ValueError: print("Datele de intrare nu corespund restrictiilor impuse") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>