Cod sursa(job #1480628)

Utilizator ciocan_catalinCiocan Catalin - Iulian ciocan_catalin Data 2 septembrie 2015 22:05:04
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define P 370003

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

struct point
{
    int i1,i2,i3;
};
point ind;
vector<int> h[370005];

int n,s,a[105],index[10];
bool ok = false;


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(a[i]+a[j]+a[k]==sum)
                {
                    ind.i1 = i;
                    ind.i2 = j;
                    ind.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 = a[i]+a[j]+a[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  =a[i]+a[j]+a[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)
                    {
                        index[1] = i;
                        index[2] = j;
                        index[3] = k;
                        t = SearchSum(complement);
                        index[4] = ind.i1;
                        index[5] = ind.i2;
                        index[6] = ind.i3;
                        ok = true;
                    }
                }
            }
}

int main()
{
    fin>>n>>s;
    for(int i=1;i<=n;i++) fin>>a[i];
    Solve();
    if(ok)
    {
        sort(index+1,index+7);
        for(int i=1;i<=6;i++) fout<<a[index[i]]<<" ";
        fout<<"\n";
    }
    else fout<<"-1\n";
    fout.close();
    return 0;
}