Cod sursa(job #1180523)

Utilizator Tudordmdaniel marin Tudordm Data 30 aprilie 2014 18:43:04
Problema Loto Scor 100
Compilator cpp Status done
Runda lab10d30aprilie2014 Marime 1.09 kb
#include <cstdio>
#include <cstdlib>
#define MAXN 101

struct sum {
  int val;
  int a, b, c;
};

int comp(const void *a, const void *b){
  return (((sum*)a)->val-((sum*)b)->val);
}

int main(){

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

  int N, S, loto[MAXN], sp, gs=0;
  int st, dr, mid, key;
  int i, j, k;
 static sum V[MAXN*MAXN*MAXN];

 scanf("%d%d", &N, &S);
  for(i=0; i<N; i++)
    scanf("%d", loto+i);

  sp=0;
  for(i=0; i<N; i++)
    for(j=i; j<N; j++)
     for(k=j; k<N; k++){
   V[sp].val=loto[i]+loto[j]+loto[k];
   V[sp].a=loto[i]; V[sp].b=loto[j]; V[sp].c=loto[k];
    sp++;
      }

  qsort(V, sp, sizeof(sum), comp);
  for(i=0; i<sp && !gs; i++){
    key=S-V[i].val; st=0; dr=sp-1;
    while(st <= dr){
      mid=((dr-st)>>1)+st;
      if(key == V[mid].val){
    printf("%d %d %d %d %d %d\n", V[i].a, V[i].b, V[i].c, V[mid].a, V[mid].b, V[mid].c);
   gs=1;
   break;
     } else if(key<V[mid].val){
   dr=mid-1;
      } else {
   st=mid+1;
     }
    }
  }

  if(!gs)
    printf("%d\n", -1);

 return 0;

}