Pagini recente » Cod sursa (job #2218287) | Cod sursa (job #2371059) | Cod sursa (job #2408756) | Cod sursa (job #2195962) | Cod sursa (job #498752)
Cod sursa(job #498752)
#include <stdio.h>
struct point {long long inf; int i1,i2; point *leg;};
point *a[1000000],*p;
int c,oi[1024],i,j,posib;
long long lanat,lanact;
inline void insereaza(long long sum,int ind1,int ind2)
{
point *act=a[sum%1000000],*pct=act;
while (pct)
{
if (pct->inf==sum) return;
pct=pct->leg;
}
pct=new point;
pct->inf=sum; pct->i1=ind1; pct->i2=ind2;
pct->leg=a[sum%1000000]; a[sum%1000000]=pct;
}
inline bool cauta(long long sum,int ind1,int ind2)
{
point *act=a[sum%1000000],*pct=act;
while (pct&&(pct->inf)>0)
{
if (pct->inf==sum) return true;
pct=pct->leg;
}
return false;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%ldd",&c,&lanat);
for (i=0;i<c;i++) scanf("%d",oi+i);
for (i=0;i<c-1;i++)
for (j=i+1;j<c;j++)
insereaza(oi[i]+oi[j],i,j);
posib=0;
for (i=0;i<1000000;i++)
{
p=a[i];
while (p&&(p->inf)>0)
{
lanact=p->inf;
if (lanat-lanact>0) posib+=(int)(cauta(lanat-lanact,p->i1,p->i2));
p=p->leg;
}
}
printf("%d\n",posib/3);
return 0;
}