Cod sursa(job #1416952)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 9 aprilie 2015 10:51:30
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

const int NMax = 105;
struct node{
    int sum,x,y,z;
}a[NMax * NMax * NMax];
int v[NMax];

int cauta(int val,int lg){
    int lo = 1,hi = lg;
    while(lo <= hi){
        int mid = (lo + hi) / 2;
        if(a[mid].sum == val){
            return mid;
        }
        if(a[mid].sum > val){
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }
    return 0;
}

int main()
{
    int n,s;
    fin >> n >> s;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
    }
    int lg = -1;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                if(v[i] + v[j] + v[k] < s){
                    lg++;
                    a[lg].sum = v[i] + v[j] + v[k];
                    a[lg].x = v[i];
                    a[lg].y = v[j];
                    a[lg].z = v[k];
                }
            }
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                int val = s - v[i] - v[j] - v[k];
                int poz = cauta(val,lg);
                if(a[poz].sum == val){
                    fout << a[poz].x << " " << a[poz].y << " " << a[poz].z << " " << v[i] << " " << v[j] << " " << v[k];
                    return 0;
                }
            }
        }
    }
    fout << -1;
    return 0;
}