Cod sursa(job #167884)

Utilizator ProtomanAndrei Purice Protoman Data 30 martie 2008 12:26:44
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>   
#define bz 777777   
#define mx 1148577   
struct poi   
{   
    long s,a,b;   
} s[mx+2];   
struct nod   
{   
    poi el;   
    nod *ua;   
} *l[bz+2];   
long i,j,c,sm,ct;   
long a[1035];   
long long nr;
  
void clad(long loc, poi x)   
{   
    nod *p;   
    p=new nod;   
    p->el=x;   
    p->ua=l[loc];   
    l[loc]=p;   
}   
  
void cauta(long loc, poi x)   
{   
    nod *p;   
    p=l[loc];   
    while (p)   
    {   
        poi h=(p->el);   
        if (h.s==sm-x.s && h.a!=x.a && h.a!=x.b && h.b!=x.a && h.b!=x.b)   
            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++)   
        {   
            ct++;   
            s[ct].s=a[i]+a[j];   
            s[ct].a=i;   
            s[ct].b=j;   
            clad((s[ct].s)%bz,s[ct]);   
        }   
    for (i=1; i<=ct; i++)   
        cauta((sm-s[i].s)%bz,s[i]);   
    printf("%lld",nr/6);   
    fclose(stdin);   
    fclose(stdout);   
    return 0;   
}