Cod sursa(job #2899305)

Utilizator suimerchantsui merchant suimerchant Data 8 mai 2022 14:53:28
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;


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


const int P=370003;
bool ok;
int n,s,m;
int v[105];
int sol[7];
vector <int> h[370005];


void read()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
}


void precalc()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=i;j<=n;j++)
        {
            for(int k=j;k<=n;k++)
            {
                int s=v[i]+v[j]+v[k];
                h[s%P].push_back(s);
            }
        }
    }
}


bool verif(int x)
{
    int mod=x%P;
    for(int i=0;i<h[mod].size();i++)
    {
        if(x==h[mod][i])
        {
            return true;
        }
    }
    return false;
}


void solve()
{
    for(int i=1;i<=n && !ok;i++)
    {
        for(int j=i;j<=n && !ok;j++)
        {
            for(int k=j;k<=n && !ok;k++)
            {
                int s=v[i]+v[j]+v[k];
                int comp=m-s;
                if(comp>0 && verif(comp))
                {
                    sol[1]=v[i];
                    sol[2]=v[j];
                    sol[3]=v[k];
                    ok=true;
                    for(int ii=1;ii<=n;ii++)
                    {
                        for(int jj=ii;jj<=n;jj++)
                        {
                            for(int kk=jj;kk<=n;kk++)
                            {
                                if((v[ii]+v[jj]+v[kk])==comp)
                                {
                                    sol[4]=v[ii];
                                    sol[5]=v[jj];
                                    sol[6]=v[kk];
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}


int main()
{
    read();
    precalc();
    solve();
    if(ok)
    {
        for(int i=1;i<=6;i++)
        {
            fout<<sol[i]<<" ";
        }
    }
    else
    {
        fout<<-1;
    }
    return 0;
}