Se dau două șiruri de numere naturale a[1]
, a[2]
, …, a[n]
și b[1]
, b[2]
, …, b[m]
.
Cerința
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, pentrui ≥ 2
,a[i] = A + (a[i-1] * C + D) % (B - A + 1)
b[1] = y
și, pentrui ≥ 2
,b[i] = A + (b[i-1] * C + D) % (B - A + 1)
Date de ieșire
Programul va afișa pe ecran numărul C
, reprezentând câte numere distincte au în comun cele două șiruri.
Restricții și precizări
2 ≤ n, m ≤ 2 000 000
2 ≤ A, B, C, D, x, y ≤ 10 000 000
Exemplu
Intrare
1 30 17 16 50 2 60 14
Ieșire
4
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema h1:
#include <bits/stdc++.h>
#define P 999023
#define pb push_back
using namespace std;
vector<int> h[P];
inline void Adauga(int x)
{
int r = x % P;
for (auto w : h[r])
if (w == x) return;
h[r].pb(x);
}
inline int Cauta(int x)
{
int r = x % P;
unsigned i, L;
L = h[r].size();
for (i = 0; i < L; i++)
if (h[r][i] == x)
{
h[r][i] = h[r][L-1];
h[r].pop_back();
return 1;
}
return 0;
}
int main()
{
int A, B, C, D;
int i, n, m, x, y, cnt;
cin >> A >> B >> C >> D;
cin >> n >> x >> m >> y;
B = B - A + 1;
Adauga(x);
for (i = 2; i <= n; i++)
{
x = A + (1LL * x * C + D) % B;
Adauga(x);
}
cnt = Cauta(y);
for (i = 2; i <= m; i++)
{
y = A + (1LL * y * C + D) % B;
cnt += Cauta(y);
}
cout << cnt << "\n";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2627 h1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2627 h1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!