Cod sursa(job #1357549)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 23 februarie 2015 23:06:50
Problema Loto Scor 30
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.88 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 102
FILE *fin, *fout;
int n, s, v[NMAX], pos = 0, poz, ans, v1[6];
struct ceva
{
    int val;
    int p1;
    int p2;
    int p3;
} arr[NMAX*NMAX*NMAX], temp;
bool comp(ceva a, ceva b)
{
    return (a.val < b.val);
}
bool cmp(ceva a, ceva b)
{
    return (a.val < b.val);
}
bool f;
int main()
{
    fin = freopen("loto.in", "r", stdin);
    fout = freopen("loto.out", "w", stdout);
    scanf("%d %d", &n, &s);
    for(int i = 0; i< n; i++) scanf("%d", &v[i]);
    for(int i = 0; i< n; i++)
    {
        for(int j = 0; j< n; j++)
        {
            for(int k = 0; k< n; k++)
            {
                arr[pos].val = v[i] + v[j] + v[k];
                arr[pos].p1 = i;
                arr[pos].p2 = j;
                arr[pos].p3 = k;
                pos++;
            }
        }
    }
    //for(int i = 0; i< n*n*n; i++) printf("%d ", arr[i].val);
    //printf("\n");
    std::sort(arr, arr+n*n*n, comp);
    //for(int i = 0; i< n*n*n; i++) printf("%d ", arr[i].val);
    //printf("\n");
    for(int i = 0; i< n; i++)
    {
        for(int j = 0; j< n; j++)
        {
            for(int k = 0; k< n; k++)
            {
                temp.val = s - v[i] - v[j] - v[k];
                poz = std::lower_bound(arr, arr+n*n*n, temp, cmp) - arr;
                if(arr[poz].val == temp.val)
                {
                    v1[0] = v[i];
                    v1[1] = v[j];
                    v1[2] = v[k];
                    v1[3] = v[arr[poz].p1];
                    v1[4] = v[arr[poz].p2];
                    v1[5] = v[arr[poz].p3];
                    f = 1;
                    break;
                }
            }
            if(f) break;
        }
        if(f) break;
    }
    std::sort(v1, v1+6);
    if(f) for(int i = 0; i< 6; i++) printf("%d ", v1[i]);
    else printf("-1");
    printf("\n");
    fclose(fin);
    fclose(fout);
    return 0;
}