Pagini recente » Cod sursa (job #2377070) | Cod sursa (job #2048738) | Cod sursa (job #1855693) | fmi-no-stress-9-warmup | Cod sursa (job #498759)
Cod sursa(job #498759)
#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 *pct=a[sum%1000000];
pct=new point;
pct->inf=sum; pct->i1=ind1; pct->i2=ind2;
pct->leg=a[sum%1000000]; a[sum%1000000]=pct;
}
inline int cauta(long long sum,int ind1,int ind2)
{
point *pct=a[sum%1000000];
int ct=0;
while (pct&&(pct->inf)>0)
{
if ((pct->inf)==sum&&(pct->i1)!=ind1&&(pct->i2)!=ind1&&(pct->i1)!=ind2&&(pct->i2)!=ind2) ct++;
pct=pct->leg;
}
return ct;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%lld",&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+=cauta(lanat-lanact,(p->i1),(p->i2));
p=p->leg;
}
}
printf("%d\n",posib/3);
return 0;
}