Cod sursa(job #167614)

Utilizator pandaemonAndrei Popescu pandaemon Data 29 martie 2008 20:42:04
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<stdlib.h>
#define NMAX 101

int n;
long long S, v[NMAX], trei[NMAX * NMAX * NMAX];
long long i,j,k,st=1,dr;

int compare(const void *a, const void *b)
{
  long long t1=*(long long*)a,t2=*(long long*)b;

  if( t1 > t2 ) return 1;
  if( t1 < t2 ) return -1;
  return 0;
}


int scout(long long val)
{
  for(i=1; i<=n; i++)
  for(j=1; j<=n; j++)
  for(k=1; k<=n; k++)

  if(v[i] + v[j] + v[k] == val)
		      { printf("%lld %lld %lld ",v[i],v[j],v[k]);
			return 0; }

return -1;}


int main()
{
  freopen("loto.in","r",stdin);
  freopen("loto.out","w",stdout);

  scanf("%d %lld",&n,&S);

  for(i=1; i<=n; i++) scanf("%d",&v[i]);

  for(i=1; i<=n; i++)
  for(j=1; j<=n; j++)
  for(k=1; k<=n; k++) trei[++dr] = v[i] + v[j]+ v[k];

  qsort(trei,dr+1,sizeof(trei[0]),compare);

  while(n)
  {

  for(; trei[st] + trei[dr] > S && st<dr; dr--);


     if( trei[st] + trei[dr] == S)
     { scout(trei[st]); scout(trei[dr]); printf("\n"); return 0;}

     if(st==dr) break;

  for(; trei[st] + trei[dr] < S && st<dr; st++);

  }

  printf("-1\n");

  return 0; }