3134 - INF

From Bitnami MediaWiki
Revision as of 09:40, 5 January 2024 by Aurelia Raluca (talk | contribs) (Pagină nouă: == Cerinta == Se consideră șirul infinit inf="INFINFINFINF...". Se dau două numere naturale n și k și un șir de caractere s de lungime n format doar din caracterele 'I' , 'N' și 'F'. Să se afle numărul minim de modificări ce trebuie realizate în șirul s pentru a obține o subsecvență de lungime k a șirului infinit inf. O modificare constă în schimbarea unui caracter din șirul s cu un alt caracter din mulțimea {'I','N','F'}. De exemplu, în urma unei mo...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinta

Se consideră șirul infinit inf="INFINFINFINF...".

Se dau două numere naturale n și k și un șir de caractere s de lungime n format doar din caracterele 'I' , 'N' și 'F'.

Să se afle numărul minim de modificări ce trebuie realizate în șirul s pentru a obține o subsecvență de lungime k a șirului infinit inf.

O modificare constă în schimbarea unui caracter din șirul s cu un alt caracter din mulțimea {'I','N','F'}.

De exemplu, în urma unei modificări a ultimului caracter, șirul "IIIFN" devine "IIIFF".

Date de intrare

Fișierul de intrare inf.in conține pe prima linie numerele n și k, iar pe a doua linie șirul s format din n caractere.

Date de iesire

Fișierul de ieșire inf.out va conține pe prima linie numărul de modificări necesare.

Restrictii si precizari

  • 2 ≤ n ≤ 1.500.000
  • 1 ≤ k ≤ 500.000
  • k ≤ n
  • Rezultatul poate fi 0
  • O subsecvență de lungime k a șirului s reprezintă un șir format din k elemente de pe poziții consecutive din șirul s.

Exemplul 1

infin.txt
5 2
FNNNN
infout.txt
Datele introduse corespund restrictiilor impuse.
1

Exemplul 2

infin.txt
10 12
FFNNI
infout.txt
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

<syntaxhighlight lang="python3" line="1">

def numar_minim_modificari(s, k):

   n = len(s)
   # Calculăm numărul necesar de caractere 'I', 'N', 'F' pentru subsecvența dorită
   numar_i = k
   numar_n = k - 1
   numar_f = k
   # Numărăm caracterele existente în șirul dat
   numar_i_s = s.count('I')
   numar_n_s = s.count('N')
   numar_f_s = s.count('F')
   # Calculăm numărul minim de modificări
   modificari_necesare = max(0, numar_i - numar_i_s) + max(0, numar_n - numar_n_s) + max(0, numar_f - numar_f_s)
   return modificari_necesare

rezultat = numar_minim_modificari(sir, lungime_subsecventa) print(f"Numărul minim de modificări necesare: {rezultat}")

</syntaxhighlight>