Cod sursa(job #3165873)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 7 noiembrie 2023 09:02:27
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>
#define START ios::sync_with_stdio(false); fin.tie(NULL); fout.tie(NULL);
#define STOP fin.close(); fout.close(); return 0;
#define DMAX 1000000
#define MAX 100
using namespace std;

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

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

int cmp(str A, str B)
{
    if(A.sum >= B.sum)
        return 0;
    return 1;
}

int n, cnt, sum;
str sum_tri[DMAX+1], A, B, aux;
int v[MAX+1];
bool ok = false;

int main()
{
    START
    fin >> n >> sum;
    for(int i=1; i<=n; i++)
        fin >> v[i];
    for(int i=1; i<=n; i++)
    {
        for(int j=i; j<=n; j++)
        {
            for(int k=j; k<=n; k++)
            {
                sum_tri[cnt].sum = v[i]+v[j]+v[k];
                sum_tri[cnt].x = v[i];
                sum_tri[cnt].y = v[j];
                sum_tri[cnt++].z = v[k];
            }
        }
    }
    sort(sum_tri,sum_tri+cnt,cmp);
    for(int i=0; i<cnt; i++)
        cout << sum_tri[i].sum << ' ';
    cout << '\n';
    for(int i=0; i<cnt; i++)
    {
        int dif = sum-sum_tri[i].sum;
        aux.sum = dif;
        int ind = lower_bound(sum_tri,sum_tri+cnt,aux,cmp)-sum_tri;
        //cout << sum_tri[i].sum << ' ' << sum-sum_tri[i].sum << " -> " << sum_tri[ind].sum << '\n';
        if((sum_tri[i].sum+sum_tri[ind].sum) == sum)
        {
            ok = true;
            A = sum_tri[i];
            B = sum_tri[ind];
            break;
        }

    }
    if(ok==false)
    {
        fout << -1;
        return 0;
    }
    else
    {
        fout << A.x << ' ' << A.y << ' ' << A.z << ' ';
        fout << B.x << ' ' << B.y << ' ' << B.z;
    }
    STOP
}