Cod sursa(job #2260853)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 15 octombrie 2018 17:50:06
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <cstdio>
#include <vector>
#include <algorithm>

#define pb push_back

using namespace std;

vector <int> v, p ;

int s1, s2 ;
int n, S ;
bool ok ;

void findS() {
    int st = 0, dr = p.size() - 1 ;
    while (st <= dr) {
        while (p[st] + p[dr] > S)
            dr -- ;
        if (p[st] + p[dr] == S) {
            s1 = p[st] ;
            s2 = p[dr] ;
            return ;
        }
        st ++ ;
    }
}

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

    int a, i, j, k ;
    scanf("%d %d", &n, &S) ;
    for (i = 0 ; i < n ; ++ i) {
        scanf("%d", &a) ;
        v.pb(a) ;
    }
    for (i = 0 ; i < n ; ++ i) {
        for (j = 0 ; j < n ; ++ j) {
            for (k = 0 ; k < n ; ++ k)
                p.pb(v[i] + v[j] + v[k]) ;
        }
    }
    sort(p.begin(), p.end()) ;
    findS() ;
    if (!s1 && !s2) {
        printf("-1") ;
        return 0 ;
    }
    for (i = 0 ; i < n && ok == 0 ; ++ i) {
        for (j = 0 ; j < n && ok == 0 ; ++ j) {
            for (k = 0 ; k < n && ok == 0 ; ++ k) {
                if (v[k] + v[j] + v[i] == s1) {
                    ok = 1 ;
                    printf("%d %d %d ", v[i], v[j], v[k]) ;
                }
            }
        }
    }
    ok = 0 ;
    for (i = 0 ; i < n && ok == 0 ; ++ i) {
        for (j = 0 ; j < n && ok == 0 ; ++ j) {
            for (k = 0 ; k < n && ok == 0 ; ++ k) {
                if (v[k] + v[j] + v[i] == s2) {
                    ok = 1 ;
                    printf("%d %d %d ", v[i], v[j], v[k]) ;
                }
            }
        }
    }
    return 0;
}