Cod sursa(job #2663111)

Utilizator marcumihaiMarcu Mihai marcumihai Data 25 octombrie 2020 13:31:48
Problema Loto Scor 65
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f ("loto.in");
ofstream g ("loto.out");

const int P = 370003;
int n,s;
int a[105];
vector <int> h[P+5];
int ind[10];
void citire ()
{
    f>>n>>s;
    for(int i=1;i<=n;++i)
        f>>a[i];

}
void afisare()
{
    sort(ind+1,ind+7);
    for(int i=1;i<=6;++i)
        g<<a[ind[i]]<<" ";
    g<<"\n";
}
bool cauta (int x)
{
    int r=x%P;
    for(auto it: h[r])
        if(it==x)
            return true;
    return false;
}
void adauga(int x)
{
    int r=x%P;
    if(!cauta(x))
        h[r].push_back(x);
}
void gasesteIndici(int sum)
{
    for(int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
            for(int k=j;k<=n;++k)
            {
                if(a[i]+a[j]+a[k]==sum)
                {
                    ind[4]=i;
                    ind[5]=j;
                    ind[6]=k;
                    return ;
                }
            }
}
void rezolvare ()
{
    for(int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
            for(int k=j;k<=n;++k)
                adauga(a[i]+a[j]+a[k]);
    for(int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
            for(int k=j;k<=n;++k)
            {
                int sumacurenta=a[i]+a[j]+a[k];
                int complement=s-sumacurenta;
                if(cauta(complement))
                {
                    ind[1]=i;
                    ind[2]=j;
                    ind[3]=k;
                    gasesteIndici(complement);
                    afisare();
                    return ;
                }

            }
    g<<-1;
}
int main()
{
    citire();
    rezolvare();

    return 0;
}