Cod sursa(job #497364)

Utilizator chiar_nimeninimeni chiar_nimeni Data 2 noiembrie 2010 12:07:37
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
# include <stdio.h>

# define p 666013

struct point  
{ 
    int inf,st,dr; 
    point *leg; 
};

point *a[666100],*d[10500000]; 
int i,r,x,n,u,s,c[1100],l,j,k; 

inline void insert (int x,int y, int z) 
{
    int nr; 
    point *q,*t; 
    nr=x%p; 
    q=a[nr]; 
    while (q && (q->inf!=x)) q=q->leg;
    if (!q)
    {
        t=new point;
        t->inf=x; 
        t->st=y;
        t->dr=z;
        t->leg=a[nr]; 
        a[nr]=t; 
    }
}

inline int afisare (int x, point *y) 
{ 
    int nr,n[5],i,j; 
    point *q; 
    nr=x%p; 
    q=a[nr]; 
    bool ok=false; 
    while (q)    
    { 
        if (q->inf==x)
			if ((y->st!=(q->st)) && (y->st!=(q->dr)) && (y->dr!=(q->st)) && (y->dr!=(q->dr)))
				if ((y->st)<(q->st))
			return 1;			
        q=(q->leg);    
    } 
	
	return 0;
    /*if (ok==true) 
    {
        if ((y->st!=(q->st)) && (y->st!=(q->dr)) && (y->dr!=(q->st)) && (y->dr!=(q->dr)))
        {
            if ((y->st)<(q->st))
            {
            n[1]=(y->st);
            n[2]=(y->dr);
            n[3]=(q->st);
            n[4]=(q->dr);
            for (i=1; i<=3; i++)
                for (j=i+1; j<=4; j++)
                    if (n[i]>n[j])
                    {
                        int aux= n[i];
                        n[i]=n[j];
                        n[j]=aux;
                    }
            for (i=1; i<=4; i++)
                printf ("%d ",n[i]);
            printf ("\n");
        }
        }
    }*/        
}  

int main () 
{ 
freopen ("oite.in","r",stdin); 
freopen ("oite.out","w",stdout); 
scanf ("%d %d",&n,&s); 
for (i=1; i<=p; i++) a[i]=NULL;
for (i=1; i<=n; i++) scanf ("%d",&c[i]);
l=0;
for (i=1; i<n; i++)
    for (j=i+1; j<=n; j++)
    {
        l++;
        d[l]=new point;
        d[l]->inf=c[i]+c[j];
        d[l]->st=i;
        d[l]->dr=j;
        insert ((d[l]->inf),i,j);
    }
int sol=0;
for (i=1; i<=l; i++)    
{
    k=s-(d[i]->inf);
    if (k>=(d[i]->inf)) if(afisare(k,d[i])) sol++;  
} 

printf("%d\n",sol);
return 0; 
}