Cod sursa(job #167664)

Utilizator pandaemonAndrei Popescu pandaemon Data 29 martie 2008 21:40:08
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<stdlib.h>
#define NMAX 101

int n;
int S, v[NMAX]; char found[1000000000];
int i,j,k,st=1,dr,x;

struct data {int a,b,c,val;} trei[NMAX*NMAX*NMAX];

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

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


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

  scanf("%d %d",&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++) { x = v[i] + v[j]+ v[k];
			if(found[x]==0)
			{trei[++dr].val=x;
			trei[dr].a = v[i];
			trei[dr].b = v[j];
			trei[dr].c = v[k]; } found[x]=1;}

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

  while(st<=dr)
  {

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


     if( trei[st].val + trei[dr].val == S)
     {
      printf("%d %d %d %d %d %d",
	      trei[st].a,trei[st].b,trei[st].c,
	      trei[dr].a,trei[dr].b,trei[dr].c);

      printf("\n"); return 0;
     }

     if(st==dr) break;

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

  }

  printf("-1\n");

  return 0; }