Pagini recente » Cod sursa (job #827401) | Istoria paginii termeni-si-conditii | Cod sursa (job #1037574) | Cod sursa (job #831916) | Cod sursa (job #199965)
Cod sursa(job #199965)
#include <stdio.h>
#include <algorithm>
#define mx 1030
#define mx2 1100010
#define bz 23551
using namespace std;
struct poz
{
long e1, e2;
poz *ua;
} *hash[bz + 4];
long n, l, rez, nr;
long a[mx], xi[mx2], xj[mx2];
void coh(long loc, long p1, long p2)
{
poz *p;
p = new poz;
p->e1 = p1;
p->e2 = p2;
p->ua = hash[loc];
hash[loc] = p;
}
void ver(long loc, long p1, long p2)
{
for (poz *p = hash[loc]; p; p = p->ua)
if ((p1 != p->e1) && (p2 != p->e1) && (p1 != p->e2) && (p2 != p->e2))
if (a[p1] + a[p2] + a[p->e1] + a[p->e2] == l)
rez++;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%ld %ld", &n, &l);
for (int i = 1; i <= n; i++)
scanf("%ld", &a[i]);
for (int i = 1; i < n; i++)
for (int j = i + 1; j <= n; j++)
{
int s = a[i] + a[j];
xi[++nr] = i;
xj[nr] = j;
coh(s % bz, i, j);
}
for (int i = 1; i <= nr; i++)
ver((l - a[xi[i]] - a[xj[i]]) % bz, xi[i], xj[i]);
printf("%ld\n", rez / 6);
fclose(stdin);
fclose(stdout);
return 0;
}