Cod sursa(job #82802)

Utilizator risenshineAkil Nasser risenshine Data 9 septembrie 2007 12:17:17
Problema Loto Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100

int n, s, a[NMAX];
int value[NMAX*NMAX*NMAX], pos[NMAX*NMAX*NMAX], p[NMAX*NMAX*NMAX];

int comp(const void * a, const void * b) {
    return value[*(int*)a] - value[*(int*)b];
}
int bcomp(const void * a, const void * b) {
    return *(int*)a - value[*(int*)b];
}
int main() {
    int i, j, k, l;
    int *q;
    int key;
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%d %d", &n, &s);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < n*n*n; i++)
        p[i] = i;
    for (i = l = 0; i < n; i++)
        for (j = 0; j < n; j++)
            for (k = 0; k < n; k++) {
                value[l] = a[i] + a[j] + a[k];
                pos[l] = a[i] + a[j]*100 + a[k]*10000;
                l++;
            }
    qsort(p, l, sizeof(int), comp);
    for (i = 0; i < l; i++) {
        key = s - value[p[i]];
        if (key > 0) {
            q = (int*) bsearch(&key, p, l, sizeof(int), bcomp);
            if (q) {
                printf("%d %d %d ", pos[p[i]]%100, (pos[p[i]]/100) % 100, (pos[p[i]]/10000) % 100);
                printf("%d %d %d\n", pos[*q]%100, (pos[*q]/100) % 100, (pos[*q]/10000) % 100);
                return 0;
            }
        }
    }
    printf("-1\n");
    return 0;
}