2645 - minlex: Difference between revisions

From Bitnami MediaWiki
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.


==Exemplu:==
==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">


# Definim funcția care elimină literele
def validare(litera_k, word):  # functia de validare a datelor de intrare
def elimina_litere(k, cuvant):
    if 1 > litera_k or litera_k >= len(word) or len(word) > 1000000:
    # Inițializăm o stivă goală
        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 = []
    # Parcurgem fiecare literă din cuvânt
     for litera in word:
     for litera in cuvant:
         while litera_k > 0 and stiva and stiva[-1] > litera:
        # În timp ce mai avem litere de eliminat și stiva nu este goală și ultima literă din stivă este mai mare decât litera curentă
         while k > 0 and stiva and stiva[-1] > litera:
            # Eliminăm ultima literă din stivă
             stiva.pop()
             stiva.pop()
             # Decrementăm numărul de litere care mai trebuie eliminate
             litera_k -= 1
            k -= 1
        # Adăugăm litera curentă în stivă
         stiva.append(litera)
         stiva.append(litera)
    # Dacă mai avem litere de eliminat, le eliminăm de la sfârșitul cuvântului
     while litera_k > 0:
     while k > 0:
         stiva.pop()
         stiva.pop()
         k -= 1
         litera_k -= 1
    # Convertim stiva într-un șir de caractere și îl returnăm
     return ''.join(stiva)
     return ''.join(stiva)


# Citim numărul K și cuvântul de la tastatură
 
intrare = input("Introduceți numărul K și cuvântul, separate printr-un spațiu: ")
if __name__ == '__main__':
# Despărțim intrarea în K și cuvânt
    try:
k, cuvant = intrare.split()
        k, cuvant = input("Introduceți numărul K și cuvântul, separate printr-un spațiu: ").split()
# Convertim K într-un număr întreg
        k = int(k)
k = int(k)
        validare(k, cuvant)
# Apelăm funcția pentru a elimina literele și afișăm rezultatul
        rezultat = elimina_litere(k, cuvant)
print(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>