Cod sursa(job #496027)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 27 octombrie 2010 16:38:52
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#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;
}