Cod sursa(job #2437262)

Utilizator Ionut28Porumb Palincas Ionut Ionut28 Data 9 iulie 2019 07:32:59
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
const int nmax = 101;
const int p = 370003;
int n, s, v[nmax], Sol[10];
struct punct
{
    int i1, i2, i3;
};
punct pct;
bool ok = false;
vector < int > h[p + 2];
int SearchSum(int sum)
{
    int i,j,k;
    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(k=j;k<=n;k++)
            {
                if(v[i]+v[j]+v[k]==sum)
                {
                    pct.i1 = i;
                    pct.i2 = j;
                    pct.i3 = k;
                    return 1;
                }
            }
    return 0;
}

void Solve()
{
     int i,j,k,r,S,complement,t,sum;
    for(i = 1; i <= n; ++i)
        for(j = i; j <= n; ++j)
            for(k = j; k <= n; ++k)
            {
                sum = v[i] + v[j] + v[k];
                 r = sum  % p;
                    if(h[r].size() == 0 || h[r][0] != sum)
                    {
                        h[r].push_back(sum);
                    }
            }
    for(i = 1; i <= n && !ok; i++)
        for(j = i; j <= n && !ok; j++)
            for(k = j; k <= n && !ok; k++)
            {
                S = v[i] + v[j] + v[k];
                complement = s - S;
                if(complement > 0)
                {
                     r = complement % p;
                    for(t = 0; t < h[r].size() && h[r][t] != complement; t++);
                    if( t < h[r].size() && h[r][t] == complement)
                    {
                            Sol[1] = i;
                            Sol[2] = j;
                            Sol[3] = k;
                            t = SearchSum(complement);
                            Sol[4] = pct.i1;
                            Sol[5] = pct.i2;
                            Sol[6] = pct.i3;
                            ok = true;
                    }
                }
            }
}
int main()
{
    fin >> n >> s;
    for(int i = 1; i <= n; ++i)
        fin >> v[i];
    Solve();
    if(ok)
    {
        sort(Sol + 1, Sol + 7);
        for(int i = 1; i <= 6; ++i)
            fout << v[Sol[i]] << " ";
    }
    else
        fout << "-1\n";
    fout.close();
    return 0;
}