Pagini recente » Cod sursa (job #1094181) | Cod sursa (job #99976) | Cod sursa (job #888247) | Cod sursa (job #1867869) | Cod sursa (job #415990)
Cod sursa(job #415990)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define NMAX 1035
#define LMAX (1<<20)+1
#define MOD 666013
#define ll long long
using namespace std;
int n,m,A[NMAX],r;
struct suma
{
int a,b,c;
};
suma B[LMAX];
vector <int> C[MOD];
ll rez;
void read()
{
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
sort(A+1,A+n+1);
}
void precompute()
{
int i,j,t,rest;
for (i=1; i<=n; i++)
for (j=i+1; j<=n; j++)
{
t=A[i]+A[j];
rest=t%MOD;
B[++r].a=t; B[r].b=i; B[r].c=j;
C[rest].push_back(r);
}
}
void solve()
{
int i,j,t,s,rest,k;
for (i=1; i<=n; i++)
for (j=i+1; j<=n; j++)
{
t=A[i]+A[j];
if (t<=m)
{
t=m-t;
rest=t%MOD;
for (k=0; k<C[rest].size(); k++)
{
s=C[rest][k];
if (B[s].a==t)
if (B[s].b!=i && B[s].b!=j && B[s].c!=i && B[s].c!=j)
rez++;
}
}
else
break ;
}
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
read();
precompute();
solve();
rez/=6;
printf("%lld\n",rez);
return 0;
}