Pagini recente » Cod sursa (job #478510) | Cod sursa (job #2580330) | Cod sursa (job #1510934) | Cod sursa (job #1790459) | Cod sursa (job #731425)
Cod sursa(job #731425)
#include <cstdio>
#include <vector>
#include <algorithm>
#define U 666013
#define x first
#define n second
#define NMax 1005
#define LL long long
using namespace std;
vector < pair <int, int> > H[U];
int N, L, X[NMax];
LL S;
inline void Insert (int V)
{
int Key=V%U;
for (int i=0; i<(int)H[Key].size (); ++i)
{
if (H[Key][i].x==V)
{
++H[Key][i].n; return;
}
}
H[Key].push_back (make_pair (V, 1));
}
inline int Find (int V)
{
if (V<0) return 0;
int Key=V%U;
for (int i=0; i<(int)H[Key].size (); ++i)
{
if (H[Key][i].x==V) return H[Key][i].n;
}
return 0;
}
void Solve ()
{
sort (X+1, X+N+1);
for (int i=2; i+2<=N; ++i)
{
for (int j=i-1; j>0; --j)
{
Insert (X[i]+X[j]);
}
for (int j=i+2; j<=N; ++j)
{
S+=(Find (L-X[i+1]-X[j]));
}
}
}
void Read ()
{
freopen ("oite.in", "r", stdin);
scanf ("%d %d", &N, &L);
for (int i=1; i<=N; ++i)
{
scanf ("%d", &X[i]);
}
}
void Print ()
{
freopen ("oite.out", "w", stdout);
printf ("%lld\n", S);
}
int main()
{
Read ();
Solve ();
Print ();
return 0;
}