2627 - H1

From Bitnami MediaWiki
Revision as of 11:13, 27 December 2023 by Mesarosdenisa (talk | contribs)

Enunt

Se dau două șiruri de numere naturale a[1], a[2], …, a[n] și b[1], b[2], …, b[m].

Cerinta

Să se determine câte numere distincte au în comun cele două șiruri. De exemplu, șirurile a=(2,5,1,4,5,1) și b=(1,1,1,3,7,5) au în comun două numere distincte: 1 și 5.

Date de intrare

Programul citește de la tastatură numere naturale A, B, C, D, n, x, m, y. Cele două șiruri se generează astfel:

  • a[1] = x și, pentru i ≥ 2, a[i] = A + (a[i-1] * C + D) % (B - A + 1)
  • b[1] = y și, pentru i ≥ 2, b[i] = A + (b[i-1] * C + D) % (B - A + 1)

Date de iesire

Programul va afișa pe ecran numărul C, reprezentând câte numere distincte au în comun cele două șiruri.

Restrictii si precizari

  • 2 ⩽ n, m ⩽ 2 000 000
  • 2 ⩽ A, B, C, D, x, y ⩽ 10 000 000

Exemplul 1

Intrare
1 30 17 16 50 2 60 14
Iesire
Datele introduse corespund restrictiilor impuse
4

Exemplul 2

Intrare
6.2 8 -11 2.2 0 -2.2 8 10
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def generare_sir(A, B, C, D, x, n):

   sir = [x]
   for i in range(2, n + 1):
       urmatorul_numar = (A + (sir[i - 1] * C + D)) % (B - A + 1)
       sir.append(urmatorul_numar)
   return set(sir)

def main():

   # Citirea datelor de intrare
   A = int(input("Introduceti A: "))
   B = int(input("Introduceti B: "))
   C = int(input("Introduceti C: "))
   D = int(input("Introduceti D: "))
   n = int(input("Introduceti n: "))
   x = int(input("Introduceti x: "))
   m = int(input("Introduceti m: "))
   y = int(input("Introduceti y: "))
   # Generarea celor două șiruri
   sir_a = generare_sir(A, B, C, D, x, n)
   sir_b = generare_sir(A, B, C, D, y, m)
   # Calculul intersecției și afișarea rezultatului
   numere_comune_distincte = len(sir_a.intersection(sir_b))
   print(f"Numarul de numere distincte comune este: {numere_comune_distincte}")

if __name__ == "__main__":

   main()

</syntaxhighlight>