Cod sursa(job #1495969)

Utilizator livliviLivia Magureanu livlivi Data 3 octombrie 2015 23:26:32
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<algorithm>
#include<cstdio>
#define K 1000000
#define N 100
using namespace std;

struct mazi{
    int S,n1,n2,n3;
};


int v[N+1];
mazi C[K+1];
int k;

void preC(int n){
    int i,j,l;

    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(l=j;l<=n;l++){
                k++;
                C[k].S=v[i]+v[j]+v[l];
                C[k].n1=v[i];
                C[k].n2=v[j];
                C[k].n3=v[l];
            }
}


bool meow(mazi a,mazi b){
    if (a.S<b.S) return true;
    return false;
}


void print(int i){
    printf ("%d %d %d ",C[i].n1,C[i].n2,C[i].n3);
}


int main(){
    freopen ("loto.in","r",stdin);
    freopen ("loto.out","w",stdout);
    int n,i,s,j;
    int R1,R2;

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

    preC(n);
    sort(C+1,C+k+1,meow);

    i=1;
    j=k;
    R1=R2=-1;
    while(C[i].S<=s &&i<=j){
        while(C[i].S+C[j].S>s &&j>i) j--;

        if (C[i].S+C[j].S==s){
            R1=i;
            R2=j;
            i=j=1;
        }
        i++;
    }

    if (R1==-1) printf ("-1");
    else {
        print(R1);
        print(R2);
    }

    return 0;
}