Cod sursa(job #1730465)

Utilizator silkMarin Dragos silk Data 16 iulie 2016 23:02:13
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <cstdio>
#include <algorithm>
#define DMax 1000005
#define NMax 105
using namespace std;

int v[DMax];
int x[NMax];

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


    int t,i,j,k,N,S,rez,st,dr,mid,s1,s2,s3,s4,s5,s6,ok;

    scanf("%d %d",&N,&S);
    for( i = 1; i <= N; ++i ) scanf("%d",&x[i]);

    for( t = 1, i = 1; i <= N; ++i )
        for( j = 1; j <= N; ++j )
            for( k = 1; k <= N; ++k )
            v[t++] = x[i] + x[j] + x[k];

    sort( v + 1, v + t );

    for( ok = 0, i = 1; i <= N; ++i )
        for( j = 1; j <= N; ++j )
            for( k = 1; k <= N; ++k )
            {
                rez = S - x[i] - x[j] - x[k];
                for( st = 1, dr = t - 1; st <= dr; )
                {
                    mid = (st + dr)/2;
                    if( v[mid] > rez ) dr = mid - 1;
                    else if( v[mid] < rez ) st = mid + 1;
                    else { ok = 1; s1 = i; s2 = j; s3 = k; i = j = k = N + 1; break; }
                }
            }


     if(!ok) printf("-1\n");
     else
     {
        for( i = 1; i <= N; ++i )
            for( j = 1; j <= N; ++j )
                for( k = 1; k <= N; ++k )
                if( x[i] + x[j] + x[k] == rez )
                {
                    s4 = i;
                    s5 = j;
                    s6 = k;
                    i = j = k = N + 1;
                }

        printf("%d %d %d %d %d %d\n",x[s1],x[s2],x[s3],x[s4],x[s5],x[s6]);
     }




return 0;
}