Cod sursa(job #1288228)

Utilizator iulian_moneIulian Mone iulian_mone Data 8 decembrie 2014 18:05:55
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

int n, sum, v[1000007], a[100];

int main(){
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%d %d", &n, &sum);
    for(int i = 1; i <= n; ++ i)
        scanf("%d", &a[i]);
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= n; ++ j)
            for(int k = 1; k <= n; ++ k)
                v[++ v[0]] = a[i] + a[j] + a[k];
    sort(v + 1, v + v[0] + 1);
    int p2 = v[0];
    for(int p1 = 1; p1 <= v[0]; ++ p1){
        while(v[p2] > sum - v[p1])
            -- p2;
        if(v[p2] == sum - v[p1] && p2 != 0 && sum - v[p1] != 0){
            int ok = 0;
            for(int i = 1; i <= n && ok == 0; ++ i)
                for(int j = 1; j <= n && ok == 0; ++ j)
                    for(int k = 1; k <= n && ok == 0; ++ k)
                        if(a[i] + a[j] + a[k] == v[p1]){
                            printf("%d %d %d ", a[i], a[j], a[k]);
                            ok = 1;
                        }
            ok = 0;
            for(int i = 1; i <= n && ok == 0; ++ i)
                for(int j = 1; j <= n && ok == 0; ++ j)
                    for(int k = 1; k <= n && ok == 0; ++ k)
                        if(a[i] + a[j] + a[k] == sum - v[p1]){
                            printf("%d %d %d", a[i], a[j], a[k]);
                            ok = 1;
                        }
            return 0;
        }
    }
    printf("-1");
    return 0;
}