Pagini recente » Cod sursa (job #503718) | Cod sursa (job #585970) | Cod sursa (job #1032786) | Cod sursa (job #2583348) | Cod sursa (job #496027)
Cod sursa(job #496027)
#include <stdio.h>
#include <stdlib.h>
typedef struct point {
int z,t;
point *leg;
};
point *h[676014];
int c,l,v[1025],nr,n1,x,s1,ok,s2,i,j,s;
void insert(int x,int z1,int t1) {
point *p;
p=new point;
p->z=z1;
p->t=t1;
p->leg=h[x];
h[x]=p;
}
void cautare(point *p,int s2) {
while (p!=NULL) {
if ((v[p->z]+v[p->t])==s2) {
if (p->z>i && p->z>j && p->t>i && p->t>j) {
nr++;
}
}
p=p->leg;
}
}
int main () {
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%d",&c,&l);
n1=676013;
for (i=1; i<=c; i++) scanf("%d",&v[i]);
for (i=1; i<=c-1; i++)
for (j=i+1; j<=c; j++) {
s=v[i]+v[j];
x=s%n1;
if (s<=l)
insert(x,i,j);
}
nr=0;
for (i=1; i<c; i++)
for (j=i+1; j<=c; j++) {
s1=v[i]+v[j];
s2=l-s1;
if (s2>=0 && s2<=l) {
x=s2%n1;
ok=0;
cautare(h[x],s2);
}
}
printf("%d\n",nr);
return 0;
}