Pagini recente » Cod sursa (job #3188750) | Cod sursa (job #418491) | Cod sursa (job #951476) | Cod sursa (job #2337423) | Cod sursa (job #49202)
Cod sursa(job #49202)
#include <stdio.h>
#include<stdlib.h>
#define NMAX 1024
#define LMAX 30103
void add(int x);
void rem(int x);
int find(int x);
int v[ NMAX ];
int N, L;
int X[LMAX][100], Y[LMAX][100], res, nrv[LMAX];
void cit() {
scanf( "%d%d", &N, &L );
for(int i = 0; i < N; i++ )
scanf( "%d", v + i );
}
void rez() {
int i, j;
for(i = 0; i < LMAX; i++)
X[i][0] = -1;
for(i = 1; i < N; i++)
for(j = i + 1; j < N; j++)
add(v[i] + v[j]);
for(i = 1; i < N - 2; i++)
{
for(j = i + 1; j < N; j++)
rem(v[i] + v[j]);
for(j = 0; j < i; j++)
res += find(L - v[i] - v[j]);
}
}
void scr() {
printf("%d\n", res);
}
int main() {
freopen( "oite.in", "r", stdin );
freopen( "oite.out", "w", stdout );
cit();
rez();
scr();
return 0;
}
void add(int x)
{
int q, *p, *r;
q = x % LMAX;
for(p = X[q], r = Y[q]; *p != -1; p++, r++)
if(*p == x)
break;
if(*p == -1)
{
if(p - X[q] >= 100) exit(5);
*(p + 1) = -1;
*p = x, *r = 1;
}
else (*r)++;
}
void rem(int x)
{
int q, *p, *r;
q = x % LMAX;
for(p = X[q], r = Y[q]; *p != -1; p++, r++)
if(*p == x) break;
(*r)--;
}
int find(int x)
{
int q, *p, *r;
if(x < 0) return 0;
q = x % LMAX;
for(p = X[q], r = Y[q]; *p != -1; p++, r++)
if(*p == x) return *r;
return 0;
}