Cod sursa(job #1314834)

Utilizator VictorDumitrescuDumitrescu Victor VictorDumitrescu Data 12 ianuarie 2015 14:19:17
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#include <algorithm>
#define MAX 1000001
using namespace std;

FILE *f,*g;
int a[101], i, n, s, k, j, nr;
struct numere{
    int s1;
    int a, b, c;
};
numere sum[MAX];

int sortare(numere x, numere y){
        return x.s1 < y.s1;
}

void sume(){
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            for(k = 1; k <= n; k++){
                nr++;
                sum[nr].s1 = a[i] + a[j] + a[k];
                sum[nr].a = a[i];
                sum[nr].b = a[j];
                sum[nr].c = a[k];
            }
    sort(sum + 1, sum + 1 + nr, sortare);
}
void cb(){
    for(i = 1; i <= nr; i++){
        int k = s - sum[i].s1;
        int left = 1, right = nr;
        while(left <= right){
            int mid = (left + right) / 2;
            if(k < sum[mid].s1)
                left = mid + 1;
            else if (k > sum[mid].s1)
                    right = mid - 1;
            else {
                fprintf(g, "%d %d %d %d %d %d\n", sum[i].a, sum[i].b, sum[i].c, sum[mid].a, sum[mid].b, sum[mid].c);
                return;
            }
        }
    }
    fprintf(g, "-1\n");
    return;
}
int main()
{
    f = fopen("loto.in", "r");
    g = fopen("loto.out", "w");
    fscanf(f, "%d%d", &n, &s);
    for(i = 1; i <= n; i++){
        fscanf(f, "%d", &a[i]);
    }
    sume();
    cb();
    fclose(f);
    fclose(g);
    return 0;
}