Cod sursa(job #2785611)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 19 octombrie 2021 00:10:06
Problema Loto Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 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 ++) {
                if ((v[d] + v[e] + v[f]) <= S) {
                    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;
}