Cod sursa(job #474808)

Utilizator cosmyoPaunel Cosmin cosmyo Data 5 august 2010 01:57:12
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<fstream.h>
#define NMAX 103
#include<algorithm>
using namespace std;
long  s1,s2,nr,s,sol[NMAX*NMAX*NMAX],n,x[NMAX];
void cit()
{ifstream fin("loto.in");
  fin>>n>>s;
  long i;
	  for(i=1;i<=n;++i)
		  fin>>x[i];
  fin.close();
}
long cauta(long a,long   p,long  u)
{long  m=(p+u)/2;
 if(p<=u)
  {if(sol[m]==a)
	  return m;
  else
	  if(a>sol[m])
		  return cauta(a,m+1,u);
	  else
		  if(a<sol[m])
			  return cauta(a,p,m-1);
  }
  else
	  return 0;
}

void solve()
{long i,j,k;
	 for(i=1;i<=n;++i)
		 for(j=1;j<=n;++j)
			 for(k=1;k<=n;++k)
				 sol[++nr]=x[i]+x[j]+x[k];
  sort(sol+1,sol+nr+1);
  for(i=1;i<=nr&&s2==0;++i)
	  {s1=sol[i];
        if(s-s1>0)
       s2=sol[cauta(s-s1,1,nr)];
	  }
}
void afis()
{ofstream fout("loto.out");
 long i,j,k,s,sw;
	 if(s2!=0)
		 {sw=0;
	      for(i=1;i<=n&&sw==0;++i)
			  for(j=1;j<=n&&sw==0;++j)
				  for(k=1;k<=n&&sw==0;++k)
					{s=0;
                     s=x[i]+x[j]+x[k];
						 if(s==s1)
						 {sw=1;
						  fout<<x[i]<<" "<<x[j]<<" "<<x[k]<<" ";
						 }
					}
		  sw=0;
		  for(i=1;i<=n&&sw==0;++i)
			  for(j=1;j<=n&&sw==0;++j)
				  for(k=1;k<=n&&sw==0;++k)
					{s=x[i]+x[j]+x[k];
						 if(s==s2)
						 {sw=1;
						  fout<<x[i]<<" "<<x[j]<<" "<<x[k]<<" ";
						 }
					}
		 }
		 else
		 fout<<-1;
		 fout<<'\n';
	 fout.close();
}
int main()
{cit(); 
 solve();
 afis();
 return 0;
}