Cod sursa(job #2950740)

Utilizator francescom_481francesco martinut francescom_481 Data 4 decembrie 2022 16:55:13
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<bits/stdc++.h>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");
#define cin fin
#define cout fout

#define N 105
#define power 73
#define mod 666013
#define oo 0x3f3f3f3f

struct pereche
{
    int i, j, t, s;
};
vector < vector < pereche > > s;
int n, p, r, v[N];

int exista(int suma)
{
    int a = suma%mod;
    for(auto T : s[a])
    {
        if(T.s == suma)return 0;
    }
    return 1;
}

int main()
{
    cin >> n >> p;
    s.resize(mod);
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> v[i];
    }
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            for(int t = 1 ; t <= n ; t++)
            {
                if(exista(v[i]+v[j]+v[t]))
                {
                    r = (v[i]+v[j]+v[t])%mod;
                    pereche p = {i,j,t,v[i]+v[j]+v[t]};
                    s[r].push_back(p);
                }
            }
        }
    }
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            for(int t = 1 ; t <= n ; t++)
            {
                if(p >= (v[i]+v[j]+v[t]))
                {
                    int k = p-(v[i]+v[j]+v[t]);
                    r = k%mod;
                    for(auto T : s[r])
                    {
                        if(T.s == k)
                        {
                            cout << v[i] << " " << v[j] << " " << v[t] << " ";
                            cout << v[T.i] << " " << v[T.j] << " " << v[T.t] << " ";
                            return 0;
                        }
                    }
                }
            }
        }
    }
    cout << -1;
    return 0;
}