Se consideră un șir de numere naturale a[1]
, a[2]
, …, a[n]
.
Cerința
Să se determine numărul tripletelor (a[i], a[j], a[p])
cu i < j < p
, iar a[i] + a[j] + a[p]
este divizibil cu 5
.
Date de intrare
Programul citește de la tastatură numerele n
, w
, X
, Y
, Z
. Șirul de n
numere se generează după relațiile: a[1] = w
, a[i] = (X * a[i-1] + Y) % Z
;
Date de ieșire
Programul va afișa pe ecran numărul tripletelor cu suma divizibilă cu 5
.
Restricții și precizări
1 ≤ n ≤ 100.000
1 ≤ w, X, Y, Z ≤ 1.000.000.000
Exemplu
Intrare
10 1 7 223 17
Ieșire
24
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 five:
// Complexitate O(n)
#include <iostream>
using namespace std;
long long a[5];
int main()
{
int i, j, k, n;
long long cnt, x1, x2, A, B, C;
cin >> n >> x1 >> A >> B >> C;
a[x1 % 5]++;
for (i = 2; i <= n; i++)
{
x2 = (x1 * A + B) % C;
a[x2 % 5]++;
x1 = x2;
}
cnt = 0;
for (i = 0; i < 5; i++)
for (j = i; j < 5; j++)
for (k = j; k < 5; k++)
if ((i + j + k) % 5 == 0)
{
if (i == j && j == k)
cnt += (a[i] * (a[i] - 1) * (a[i] - 2) / 6);
else if (i == j)
cnt += (a[i] * (a[i] - 1) / 2 * a[k]);
else if (j == k)
cnt += (a[j] * (a[j] - 1) / 2 * a[i]);
else
cnt += (a[i] * a[j] * a[k]);
}
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 #2619 five
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2619 five 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!