2627 - H1: Difference between revisions
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 | *2 ⩽ n, m ⩽ 2 000 000 | ||
*2 | *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 | |||
: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 | |||
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>