Cod sursa(job #3306519)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 11 august 2025 15:23:22
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <bits/stdc++.h>

using namespace std;

struct e1
{
    int s,x,y,z;
};
e1 v1[1000555];

struct el
{
    int s,x,y,z;
};
el v2[1000555];

int v[105];

int r[15];

bool ord(const el & a,const el & b)
{
    if(a.s<b.s)
    {
        return true;
    }
    return false;
}

int main()
{
    ifstream cin("loto.in");
    ofstream cout("loto.out");
    int n,s;
    cin>>n>>s;
    for(int i=1; i<=n; ++i)
    {
        cin>>v[i];
    }
    int i1=0,i2=0;
    for(int x=1; x<=n; ++x)
    {
        for(int y=x; y<=n; ++y)
        {
            for(int z=y; z<=n; ++z)
            {
                ++i1;
                v1[i1].x=v[x];
                v1[i1].y=v[y];
                v1[i1].z=v[z];
                v1[i1].s=v[x]+v[y]+v[z];
            }
        }
    }
    for(int x=1; x<=n; ++x)
    {
        for(int y=x; y<=n; ++y)
        {
            for(int z=y; z<=n; ++z)
            {
                ++i2;
                v2[i2].x=v[x];
                v2[i2].y=v[y];
                v2[i2].z=v[z];
                v2[i2].s=v[x]+v[y]+v[z];
            }
        }
    }
    r[1]=-1;
    sort(v2+1,v2+i2+1,ord);
    for(int i=1; i<=i1; ++i)
    {
        int st=1,dr=i2,in=-1,mij,dif;
        dif=s-v1[i].s;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v2[mij].s==dif)
            {
                in=mij;
                break;
            }
            else if(v2[mij].s<dif)
            {
                st=mij+1;
            }
            else
            {
                dr=mij-1;
            }
        }
        if(in!=-1)
        {
            r[1]=v1[i].x;
            r[2]=v1[i].y;
            r[3]=v1[i].z;
            r[4]=v2[in].x;
            r[5]=v2[in].y;
            r[6]=v2[in].z;
            break;
        }
    }
    if(r[1]==-1)
    {
        cout<<-1;
    }
    else
    {
        sort(r+1,r+7);
        for(int i=1;i<=6;++i)
        {
            cout<<r[i]<<" ";
        }
    }
    return 0;
}