Cod sursa(job #2519871)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 8 ianuarie 2020 15:31:55
Problema Loto Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

struct trei {
    int x, y, z, sum;
};

int v[128], n, s;
bool found;
trei sums[1000001];
int cnt;

bool cmp(trei a, trei b) {
    return a.sum < b.sum;
}

void citire() {
    fin >> n >> s;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
}

/*int cb(int st, int dr, int x) {
    while(dr >= st) {
        int m = (st+dr)/2;
        if(sums[m].sum == x)
            return m;
        else if(sums[m].sum > x)
            dr = m-1;
        else
            st = m+1;
    }
    return -1;
}*/

void solve() {
    for(int i = 1; i<= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++) {
                cnt++;
                sums[cnt] = {v[i], v[j], v[k], v[i]+v[j]+v[k]};
            }

    sort(sums+1, sums+cnt+1, cmp);

    int a = 1, b = cnt;
    while(a <= b) {
        if(sums[a].sum+sums[b].sum == s) {
            found = true;
            fout << sums[a].x << ' ' << sums[a].y << ' ' << sums[a].z << ' ' << sums[b].x << ' ' << sums[b].y << ' ' << sums[b].z;
            return;
        } else if(sums[a].sum + sums[b].sum < s)
            a++;
        else
            b--;
    }

   // for(int a = 0; a < cnt; a++) {
     //   int poz = cb(1, cnt, s-sums[a].sum);
       // if(poz != -1) {
         //   found = true;
           // fout << sums[a].x << ' ' << sums[a].y << ' ' << sums[a].z << ' ' << sums[poz].x << ' ' << sums[poz].y << ' ' << sums[poz].z;
            //return;
        //}
    //}
}


int main() {
    citire();
    solve();
    if (!found) fout << -1;
}