Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Diferente pentru runda/proba123451 intre reviziile 2 si 7 | Cod sursa (job #168049)
Cod sursa(job #168049)
#include <stdio.h>
#define dif 10000
#define bz 150001
struct nod
{
unsigned long el;
nod *ua;
} *l[bz+2];
long i,j,a1,a2,c,sm;
long a[1100035];
long long nr;
void clad(long loc)
{
nod *p;
p=new nod;
p->el=dif*i+j;
p->ua=l[loc];
l[loc]=p;
}
void cauta(long loc)
{
nod *p;
p=l[loc];
while (p)
{
a1=(p->el)%dif;
a2=(p->el)/dif;
if (sm-a[i]-a[j]==a[a1]+a[a2] && a1!=i && a2!=i && a1!=j && a2!= j)
nr++;
p=p->ua;
}
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%ld %ld",&c,&sm);
for (i=1; i<=c; i++)
scanf("%ld",&a[i]);
for (i=1; i<c; i++)
for (j=i+1; j<=c; j++)
clad((a[i]+a[j])%bz);
for (i=1; i<c; i++)
for (j=i+1; j<=c; j++)
cauta((sm-a[i]-a[j])%bz);
printf("%lld\n",nr/6);
fclose(stdin);
fclose(stdout);
return 0;
}