3624 - Bal 1

From Bitnami MediaWiki
Revision as of 10:28, 4 January 2024 by Codrut Borcutean (talk | contribs) (Pagină nouă: Tocmai a ajuns la balul din sat un grup de '''n''' fete numerotate de la '''1''' la '''n'''. Acolo sunt așteptate de '''m''' băieți frumoși, numerotați de la '''1''' la '''m'''. Fiecare băiat '''i''' ('''i=1..m''') are un coeficient de frumusețe '''b[i]'''. Fetele nu acceptă orice băiat la dans. Fata '''i''' va accepta să danseze cu un băiat doar dacă băiatul are un coeficient de frumusețe mai mare sau egal cu '''f[i]'''. == Cerinţa == Cunoscând coeficienții...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Tocmai a ajuns la balul din sat un grup de n fete numerotate de la 1 la n. Acolo sunt așteptate de m băieți frumoși, numerotați de la 1 la m. Fiecare băiat i (i=1..m) are un coeficient de frumusețe b[i]. Fetele nu acceptă orice băiat la dans. Fata i va accepta să danseze cu un băiat doar dacă băiatul are un coeficient de frumusețe mai mare sau egal cu f[i].

Cerinţa[edit | edit source]

Cunoscând coeficienții de frumusețe ai băieților, b[1], b[2], …, b[m] precum și coeficienții preferințelor fetelor, f[1], f[2], …, f[n], să se determine numărul maxim de perechi de dansatori care se poate forma.

Date de intrare[edit | edit source]

Fișierul de intrare balin.txt conține pe prima linie numerele n și m. Pe a doua linie sunt n numere naturale separate prin spații f[1], f[2], …, f[n] reprezentând coeficienții fetelor, iar pe a treia linie sunt numerele b[1], b[2], …, b[m] reprezentând coeficienții băieților.

Date de ieșire[edit | edit source]

Fișierul de ieșire balout.txt va conține un singur număr natural P, reprezentând numărul perechilor (f[i], b[j]) care se poate forma astfel încât f[i] ⩽ b[j].

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ n, m ⩽ 100.000
  • coeficienții băieților și fetelor sunt numere naturale nenule mai mici sau egale cu 1.000.000.000

Exemplu 1[edit | edit source]

balin.txt
3 3
4 1 5
2 6 3
balout.txt
Datele de intrare corespund restrictiilor impuse
2


Exemplu 2[edit | edit source]

balin.txt
3 3
4 11000000000 5
2 6 3
balout.txt
Datele de intrare nu corespund restrictiilor impuse


Explicatie[edit | edit source]

Sunt trei fete și trei băieți. Se pot forma doar două perechi: (1,2) și (4,6)

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def numar_maxim_perechi(n, m, fete, baieti):

   # Calculează numărul maxim de perechi de dansatori care se poate forma.
   fete.sort()
   baieti.sort()
   i = j = perechi = 0
   while i < n and j < m:
       if fete[i] <= baieti[j]:
           perechi += 1
           i += 1
       j += 1
   return perechi


def main():

   with open('balin.txt', 'r') as fin, open('balout.txt', 'w') as fout:
       n, m = map(int, fin.readline().split())
       fete = list(map(int, fin.readline().split()))
       baieti = list(map(int, fin.readline().split()))
       # Verifică dacă datele de intrare respectă restricțiile
       if not (1 <= n <= 100000 and 1 <= m <= 100000 and all(1 <= x <= 1000000000 for x in fete + baieti)):
           fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
           return
       fout.write("Datele de intrare corespund restrictiilor impuse\n")
       perechi = numar_maxim_perechi(n, m, fete, baieti)
       fout.write(f"{perechi}\n")


if __name__ == "__main__":

   main()


</syntaxhighlight>