Cod sursa(job #129858)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 30 ianuarie 2008 12:43:47
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
#include <stdlib.h>

long n,s,i,j,k,q,a[100],s3[1000002],ind[1000002],nr1,nr2,nr3;

int comp(const void *n1, const void *n2){
    return *(long*)n1-*(long*)n2;
}

int main(){
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    
    scanf("%ld %ld",&n,&s);
    for (i=1;i<=n;i++)
        scanf("%ld",&a[i]);

    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            for (k=1;k<=n;k++)
                {q++;ind[q]=q;s3[q]=a[i]+a[j]+a[k];}
    qsort(ind,q+1,sizeof(long),comp);
    j=q;
    for (i=1;i<=q;i++){
        while (s3[ind[i]]+s3[ind[j]]>s)j--;
        if (!j>0)break;
        if (s3[ind[i]]+s3[ind[j]]==s){
           k=ind[i];
           nr3=k/(n*n);
           if (k%(n*n))nr3++;
           k=k%(n*n);
           nr2=k/n;
           if (k%n)nr2++;
           if(nr2==0)nr2=n;
           k=k%n;
           nr1=k;
           if (nr1==0)nr1=n;
           printf("%ld %ld %ld ",a[nr1],a[nr2],a[nr3]);
           k=ind[j];
           nr3=k/(n*n);
           if (k%(n*n))nr3++;
           k=k%(n*n);
           nr2=k/n;
           if (k%n)nr2++;
           if(nr2==0)nr2=n;
           k=k%n;
           nr1=k;
           if (nr1==0)nr1=n;

           printf("%ld %ld %ld\n",a[nr1],a[nr2],a[nr3]);
           return 0;
        }
    }
    printf("-1\n");
 
return 0;   
}