Cod sursa(job #2786010)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 20 octombrie 2021 00:19:46
Problema Loto Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in ("loto.in");
ofstream out ("loto.out") ;
bool cmpsuma (int x, int y) {
    return x < y;
};
int main()
{
    int n, S, i;
    in>> n >> S;
    vector<int> v(n + 1, 0);
    vector<int> 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] = v[a] + v[b] + v[c];
            }
    sort(w.begin(), w.end(), cmpsuma);
    int ans, d, e, f;
    bool ok = 1, k = 1;
    for (d = 1; d <= n && ok == 1; d ++)
        for (e = 1; e <= n && ok == 1; e ++)
            for (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]) {
                            c2 = m;
                        }
                        else {
                            c1 = m;
                        }
                    }
                    if (w[c2] == r)
                        ans = c2;
                    else
                        ans = c1;
                    if (w[ans] == r) {
                        ok = 0;
                    }
                }
            }
    for (int a = 1; a <= n && k == 1; a ++)
        for (int b = 1; b <= n && k == 1; b ++)
            for (int c = 1; c <= n && k == 1; c ++){
                if ((v[a] + v[b] + v[c]) == (S - v[d - 1] - v[e - 1] - v[f - 1])) {
                    k = 0;
                    out<< v[d - 1] << " " << v[e - 1] << " " << v[f - 1] << " " << v[a] << " " << v[b] << " " << v[c];
                }
            }
    if (k == 1)
        out<< -1;

    return 0;
}