Pagini recente » Cod sursa (job #1514654) | Cod sursa (job #1788788) | Cod sursa (job #1649557) | Cod sursa (job #2685722) | Cod sursa (job #1060730)
#include <cstdio>
#include <vector>
#define M 666013
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
int v[2048];
vector < pair <int, int> > h[M];
int main ()
{
freopen ("oite.in", "r", stdin);
freopen ("oite.out", "w", stdout);
int n, l;
scanf ("%d %d", &n, &l);
for (int i = 0; i < M; i++)
h[i].reserve (5);
for (int i = 1; i <= n; i++)
scanf ("%d", &v[i]);
long long sol = 0;
for (int i = 1; i <= n; i++)
{
for (int j = i + 1; j <= n; j++)
{
int nr = v[i] + v[j];
nr = l - nr;
if (nr < 0) continue;
int ind = nr % M;
for (int q = 0; q < h[ind].size (); q++)
if (h[ind][q].f == nr) sol += h[ind][q].s;
}
for (int j = 1; j < i; j++)
{
int nr = v[i] + v[j];
if (nr > l) continue;
int ind = nr % M, q;
for (q = 0; q < h[ind].size (); q++)
if (h[ind][q].f == nr)
{
h[ind][q].s++;
break;
}
if (q == h[ind].size ()) h[ind].pb ( mp(nr, 1) );
}
}
printf ("%d\n", sol);
return 0;
}