Pagini recente » Cod sursa (job #93592) | Cod sursa (job #329549) | Cod sursa (job #738812) | Cod sursa (job #452276) | Cod sursa (job #497528)
Cod sursa(job #497528)
#include <cstdio>
#include <vector>
using namespace std;
const int MOD = 666013;
const int NMAX = 1048;
int V[NMAX], A[MOD], n, x, i, j, k, a, b, c, nr;
vector < pair <int, int> > H[MOD + 10];
int cauta (int);
void adauga (int), sterge (int);
int main () {
freopen ("oite.in", "r", stdin);
freopen ("oite.out", "w", stdout);
scanf ("%d %d", &n, &x);
for (i = 1; i <= n; ++i)
scanf ("%d", &V[i]);
for (i = 3; i < n; ++i)
for (j = i + 1; j <= n; ++j) {
a = V[i] + V[j];
adauga (a);
}
for (k = 2; k < n - 1; ++k) {
for (i = 1; i < k; ++i) {
a = V[i] + V[k];
if (x >= a)
nr += cauta (x - a);
}
for (i = k + 2; i <= n; ++i) {
a = V[k+1] + V[i];
sterge (a);
}
}
printf ("%d", nr);
return 0;
}
void adauga (int v) {
int p = v % MOD;
vector < pair <int, int> >::iterator it;
for (it = H[p].begin (); it != H[p].end (); ++it)
if (it -> first == v) {
it -> second++;
return;
}
H[p].push_back (make_pair (v, 1));
}
int cauta (int v) {
int p = v % MOD;
vector < pair <int, int> >::iterator it;
for (it = H[p].begin (); it != H[p].end (); ++it)
if (it -> first == v)
return it -> second;
return 0;
}
void sterge (int v) {
int p = v % MOD;
vector < pair <int, int> >::iterator it;
for (it = H[p].begin (); it != H[p].end (); ++it)
if (it -> first == v) {
it -> second--;
if (it -> second == 0) H[p].erase (it);
return;
}
}