Cod sursa(job #2647581)

Utilizator cyg_dawidDavid Ghiberdic cyg_dawid Data 5 septembrie 2020 12:31:57
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <algorithm>
#define ll long long

using namespace std;

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

const int NMAX = 1e6 + 5, VMAX = 105;
struct ELEMENT {
    int val1;
    int val2;
    int val3;
    int sum;
} v[NMAX];
int vct[VMAX];

int n, s;
int cnt;

bool cmp(ELEMENT x, ELEMENT y) {
    return x.sum < y.sum;
}

void afis(int a, int b) {
    fout << v[a].val1 << " " << v[a].val2 << " " << v[a].val3 << " ";
    fout << v[b].val1 << " " << v[b].val2 << " " << v[b].val3 << "\n";
}

void my_search() {
    int st = 1, dr = cnt;
    while(st <= dr) {
        int val = v[st].sum + v[dr].sum;
        if(val == s) {
            afis(st, dr);
            return;
        } else if(val < s)
            st++;
        else
            dr--;
    }
    fout << "-1";
}

int main()
{
    fin >> n; fin >> s;
    for(int i = 1; i <= n; i++) {
        fin >> vct[i];
    }
    for(int i = 1; i <= n; i++) {
        for(int j = i; j <= n; j++) {
            for(int r = j; r <= n; r++) {
                int valoareSuma = vct[i] + vct[j] + vct[r];
                if(valoareSuma > s)
                    continue;
                v[++cnt].val1 = vct[i];
                v[cnt].val2 = vct[j];
                v[cnt].val3 = vct[r];
                v[cnt].sum = valoareSuma;
            }
        }
    }
    sort(v + 1, v + cnt + 1, cmp);
    my_search();
    return 0;
}