Cod sursa(job #2785612)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 19 octombrie 2021 00:27:57
Problema Loto Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in ("loto.in");
ofstream out ("loto.out") ;
struct suma {
    int s, first, second, third;
};
bool cmpsuma (suma x, suma y) {
    return x.s < y.s;
};
int main()
{
    int n, S, i;
    in>> n >> S;
    vector<int> v(n + 1, 0);
    vector<suma> w(n * n * n + 1);
    for (i = 1; i <= n; i++)
        in>> v[i];
    i = 0;
    for (int a = 1; a <= n; a ++)
        for (int b = 1; b <= n; b ++)
            for (int c = 1; c <= n; c ++){
            i++;
            w[i].s = v[a] + v[b] + v[c];
            w[i].first = a;
            w[i].second = b;
            w[i].third = c;
        }
    sort(w.begin(), w.end(), cmpsuma);
    int ans;
    bool ok = 1;
    for (int d = 1; d <= n && ok == 1; d ++)
        for (int e = 1; e <= n && ok == 1; e ++)
            for (int f = 1; f <= n && ok == 1; f ++) {
                int r = S - ( v[d] + v[e] + v[f]), c1 = 1, c2 = i, m;
                while (c2 - c1 > 1) {
                    m = (c1 + c2) / 2;
                    if (r <= w[m].s) {
                        c2 = m;
                    }
                    else {
                        c1 = m;
                    }
                }
                if (w[c2].s == r)
                    ans = c2;
                else
                    ans = c1;
                if (w[ans].s == r) {
                    ok = 0;
                    out<< v[d] << " " << v[e] << " " << v[f] << " " << v[w[ans].first] << " " << v[w[ans].second] << " " << v[w[ans].third];
                }
            }
    if (ok == 1)
        out<< -1;

    return 0;
}