Cod sursa(job #1750798)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 30 august 2016 23:34:59
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

const int mod=666013;

int n, s;
struct sol
{
    int a, b, c, s;
};

vector <sol> H[666500];

int a[105];

inline void ins(int a, int b, int c, int x)
{
    int h=x%mod;
    sol k;
    k.a=a;k.b=b;k.c=c;k.s=x;
    H[h].push_back(k);
}

inline int find_elem(int x)
{
    int h=x%mod;
    for(int i=0;i<H[h].size();++i)
    {
        if(H[h][i].s==x)
        {
            return i;
        }
    }
    return -1;
}

int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%d%d", &n, &s);
    for(int i=0;i<n;i++)
        scanf("%d", &a[i]);
    for(int i=0;i<n;i++)
        for(int j=i;j<n;j++)
            for(int k=j;k<n;k++)
                ins(a[i], a[j], a[k], a[i]+a[j]+a[k]);
    for(int i=0;i<n;i++)
        for(int j=i;j<n;j++)
            for(int k=j;k<n;k++)
            {
                int s2=s-(a[i]+a[j]+a[k]);
                int l=find_elem(s2);
                if(l!=-1)
                {
                    int h=s2%mod;
                    printf("%d %d %d %d %d %d", a[i], a[j], a[k], H[h][l].a, H[h][l].b, H[h][l].c);
                    return 0;
                }
            }
    printf("-1");
    return 0;
}