Cod sursa(job #51776)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 16 aprilie 2007 20:03:58
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
int n,i,i1,i2,i3,m,a[5600],b[5600],aux1;
long int x[101],y[5600],s,aux,t;
int heapdown(int ic,int nc);
int main()
{
	FILE *f,*g;
	f=fopen("loto.in","r");
	g=fopen("loto.out","w");
	fscanf(f,"%d",&n);
	fscanf(f,"%ld",&s);
	for(i=1;i<=n;i++)
	fscanf(f,"%ld",&x[i]);
	for(i1=1;i1<=n;i1++)
	 for(i2=i1;i2<=n;i2++)
	  {m++;y[m]=x[i1]+x[i2];a[m]=i1;b[m]=i2;}
	for(i=m/2;i>=1;i--)
	heapdown(i,m);
	for(i=m;i>=1;i--)
	{  aux=y[i];y[i]=y[1];y[1]=aux;
	   aux1=a[i];a[i]=a[1];a[1]=aux1;
	   aux1=b[i];b[i]=b[1];b[1]=aux1;
	   heapdown(1,i-1);
	}
	for(i1=1;(i1<=m)&&(3*y[i1]<=s);i1++)
	 for(i2=i1;(i2<=m)&&(y[i1]+2*y[i1]<=s);i2++)
	  for(i3=i2;(i3<=m)&&(y[i1]+y[i2]+y[i3]<=s);i3++)
	    { t=y[i1]+y[i2]+y[i3];
	       if(t==s)
	       { fprintf(g,"%ld %ld %ld %ld %ld %ld\n",x[a[i1]],x[b[i1]],x[a[i2]],x[b[i2]],x[a[i3]],x[b[i3]]);
		 fcloseall();
		 return 0;
	       }}
	fprintf(g,"-1\n");
	fcloseall();
	return 0;
}
int heapdown(int ic,int nc)
{
	int is;
	if(2*ic>nc)return 0;
	is=2*ic;
	if(2*ic<nc&&y[2*ic+1]>y[2*ic])is=2*ic+1;
	if(y[is]>y[ic]){aux=y[is],y[is]=y[ic];y[ic]=aux;
			aux1=a[is];a[is]=a[ic];a[ic]=aux1;
			aux1=b[is];b[is]=b[ic];b[ic]=aux1;heapdown(is,nc);}
	return 0;
}