Cod sursa(job #164951)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 24 martie 2008 23:14:56
Problema Loto Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <stdlib.h>
int compara(const void *a,const void *b){
    return *(int*)a-*(int*)b;
}
int n,v[1310];
void afis(int x){
    int i,j,k;
    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]==x){
                    printf("%d %d %d",v[i],v[j],v[k]);    
                    return;
                }        
}
   
int main(){
    int nrx=0,i,j,k,s,g,sum,aux,poz1,poz2,t,p;
    int x[100010];
    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[++nrx]=v[i]+v[j]+v[k];
    t=nrx;
    p=1;
    x[0]=0;
    qsort(x,nrx+1,sizeof(x[0]),compara);
    while (p<=t){
          while (x[p]+x[t]>s && t>0)    
                t--;
          if (x[p]+x[t]==s){
             afis(x[p]);
             printf(" ");
             afis(x[t]);
             printf("\n");
             return 0;            
          }
          if (t<=0)
             break;
          while (x[p]+x[t]<s&&p<=nrx)
                ++p;
    }
    printf("-1\n");
    return 0;
}