Pagini recente » Cod sursa (job #2603633) | Cod sursa (job #2882088) | Cod sursa (job #369493) | Cod sursa (job #1661800) | Cod sursa (job #498762)
Cod sursa(job #498762)
#include <stdio.h>
#define mod 999887
struct point {long long inf; int i1,i2; point *leg;};
point *a[mod],*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%mod];
pct=new point;
pct->inf=sum; pct->i1=ind1; pct->i2=ind2;
pct->leg=a[sum%mod]; a[sum%mod]=pct;
}
inline void cauta(long long sum,int ind1,int ind2)
{
point *pct=a[sum%mod];
while (pct&&(pct->inf)>0)
{
if ((pct->inf)==sum&&(pct->i1)!=ind1&&(pct->i2)!=ind1&&(pct->i1)!=ind2&&(pct->i2)!=ind2) posib++;
pct=pct->leg;
}
}
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++)
if (oi[i]+oi[j]<lanat) insereaza(oi[i]+oi[j],i,j);
posib=0;
for (i=0;i<mod;i++)
while (a[i])
{
if (lanat-a[i]->inf>0) cauta(lanat-a[i]->inf,(a[i]->i1),(a[i]->i2));
a[i]=a[i]->leg;
}
printf("%d\n",posib/3);
return 0;
}