Cod sursa(job #497339)

Utilizator chiar_nimeninimeni chiar_nimeni Data 2 noiembrie 2010 10:44:36
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 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 void 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)         
		{       
			ok=true;         
			break;         
		} 
		q=(q->leg);     
	} 
	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);
	}
for (i=1; i<=l; i++)	
{
	k=s-(d[i]->inf);
	afisare(k,d[i]);  
} 
return 0; 
}