Pagini recente » Cod sursa (job #1853164) | Cod sursa (job #1072029) | Cod sursa (job #73025) | Cod sursa (job #1355980) | Cod sursa (job #496032)
Cod sursa(job #496032)
#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;
}
int comp(const void *a,const void *b) {
int *x=(int*)a;
int *y=(int*)b;
if (*x<*y) return -1;
else if (*x==*y) return 0;
else return 1;
}
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=0; i<c; i++) scanf("%d",&v[i]);
qsort(v,c,sizeof(int),comp);
for (i=0; i<c; i++) {
if (v[i]+v[i+1]>l) break;
for (j=i+1; j<c; j++) {
s=v[i]+v[j];
if (s>l) break;
x=s%n1;
if (s<=l)
insert(x,i,j);
}
}
nr=0;
for (i=0; 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;
}