2627 - H1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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 + (...
 
No edit summary
Line 1: Line 1:
== Enunt ==
== Enunt ==


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


== Cerinta ==
== 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.
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 ==
== 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:
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)
*a[1] = x și, pentru i ≥ 2, a[i] = A + (a[i-1] * C + D) % (B - A + 1)
Line 16: Line 16:
== Date de iesire ==
== Date de iesire ==


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


== Restrictii si precizari ==
== Restrictii si precizari ==


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


== Exemplul 1 ==
== Exemplul 1 ==
Line 27: Line 27:
:1 30 17 16 50 2 60 14
:1 30 17 16 50 2 60 14
;Iesire
;Iesire
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
:4
:4


Line 34: Line 34:
:6.2 8 -11 2.2  0 -2.2 8 10
:6.2 8 -11 2.2  0 -2.2 8 10
;Iesire
;Iesire
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse





Revision as of 11:13, 27 December 2023

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>