Pagini recente » Cod sursa (job #132278) | Cod sursa (job #669216) | Cod sursa (job #1014463) | Cod sursa (job #967688) | Cod sursa (job #49356)
Cod sursa(job #49356)
using namespace std;
#include<stdio.h>
#include<vector>
#define NMAX 1024
#define LMAX 8999
void read();
void solve();
void add( int val );
void rem( int val );
int find(int val);
struct ent {
int x, y;
ent( int a = 0, int b = 0 ) {
x = a, y = b;
}
};
int N, A[NMAX], L;
vector<ent> H[LMAX];
typedef vector< ent >::iterator it;
int x, y;
int main()
{
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
read();
solve();
return 0;
}
void read()
{
scanf("%d%d", &N, &L);
for(int i = 0; i < N; i++)
scanf("%d", A + i);
}
void solve()
{
int i, j, rez = 0;
for(i = N - 1; i >= 2; i--)
for(j = i - 1; j >= 1; j--)
add( A[i] + A[j] );
for(i = 1; i < N - 2; i++)
{
for(j = i + 1; j < N; j++)
rem( A[i] + A[j] );
for(j = i - 1; j >= 0; j--)
rez += find(L - A[i] - A[j]);
}
printf("%d\n", rez);
}
void add( int val )
{
int q;
it i;
q = val % LMAX;
for( i = H[q].begin(); i != H[q].end(); i++ )
if( i->x == val)
break;
if( i == H[q].end() )
H[q].push_back( ent(val, 1) );
else
i->y ++;
}
void rem( int val )
{
int q;
it i;
q = val % LMAX;
for(i = H[q].begin(); i != H[q].end(); i++)
if(i->x == val) break;
i->y --;
}
int find(int val)
{
int q;
it i;
if(val < 0) return 0;
q = val % LMAX;
for(i = H[q].begin(); i != H[q].end(); i++)
if(i->x == val)
return i->y;
return 0;
}