Cod sursa(job #135290)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 13 februarie 2008 14:39:24
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
long int n,x[100],a[10000],s,m;
void isort(void)
{
 long int i,j,v;
 for(i=1;i<n;i++)
  {
   j=i-1;
   v=a[i];
   while((j>=0)&&(a[j]>v))
    a[j+1]=a[j--];
   a[j+1]=v;
  }
}

long int cauta(long int y,long int pas,long int p)
{
 pas/=2;
 if(a[p]<y)
  p=p+pas/2;
 else
  if(a[p]>y)
   p=p-pas/2;
 else
  if(a[p]==y)
   return a[p];
 if(pas==0)
  return -1;
 else
  return cauta(y,pas,p);
}

int main()
{
 long int i,j,k,p,z,sp;
 FILE *f;
 f=fopen("loto.in","rt");
 fscanf(f,"%d %ld",&n,&s);
 for(i=0;i<n;i++)
  fscanf(f,"%ld",&x[i]);
 fclose(f);
 f=fopen("loto.out","wt");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   for(k=0;k<n;k++)
    a[m++]=x[i]+x[j]+x[k];
 for(p=0;p<m;p++)
  {
   z=cauta(s-a[p],m,m/2);
   if(z!=-1)
    {
     sp=1;
     for(i=0;(i<n)&&sp;i++)
      for(j=0;(j<n)&&sp;j++)
       for(k=0;(k<n)&&sp;k++)
	if((x[i]+x[j]+x[k])==a[p])
	 sp=0;
     fprintf(f,"%ld %ld %ld",x[i],x[j],x[k-1]);
     for(i=0;(i<n)&&sp;i++)
      for(j=0;(j<n)&&sp;j++)
       for(k=0;(k<n)&&sp;k++)
	if((x[i]+x[j]+x[k])==(s-a[i]))
	 sp=0;
     fprintf(f," %ld %ld %ld",x[i],x[j],x[k-1]);
     fclose(f);
     return 0;
    }
  }
 fprintf(f,"-1");
 fclose(f);
 return 0;
}