Cod sursa(job #1315488)

Utilizator serban_ioan97Ciofu Serban serban_ioan97 Data 12 ianuarie 2015 20:54:38
Problema Loto Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <cstdio>
#include <vector>
#define mod 666013
#define nmax 1001
#define pb push_back

using namespace std;

struct loto
{
    int s, x, y, z;
}X;

vector<loto> kush[mod];

int v[nmax], i, j, n, k, s, s1;

inline vector<loto>::iterator find_v(int x)
{
    int list=x%mod;
    vector<loto>::iterator it;
    loto X;

    for(it=kush[list].begin(); it!=kush[list].end(); ++it)
    {
        X=*it;
        if(X.s==x) return it;
    }

    return it;
}

void insert_value(int x, int a, int b, int c)
{
    int list=x%mod;
    vector<loto>::iterator it;
    loto X;

    for(it=kush[list].begin(); it!=kush[list].end(); ++it)
    {
        X=*it;
        if(X.s==x) return ;
    }
    X.s=x; X.x=a; X.y=b; X.z=c;
    kush[list].pb(X);
}

int main()
{
    freopen("loto.in", "rt", stdin);
    freopen("loto.out", "wt", stdout);

    scanf("%d%d", &n, &s);

    for(i=1; i<=n; ++i)
    scanf("%d", &v[i]);

    vector<loto>::iterator it;

    for(i=1; i<=n; ++i)
        for(j=i; j<=n; ++j)
            for(k=j; k<=n; ++k)
            {
                s1=v[i]+v[j]+v[k];
                it=find_v(s-s1);

                if(it!=kush[(s-s1)%mod].end())
                {
                    X=*it;
                    printf("%d %d %d ", v[i], v[j], v[k]);
                    printf("%d %d %d ", X.x, X.y, X.z);
                    return 0;
                }

                insert_value(s1, v[i], v[j], v[k]);
            }
    printf("-1");
    return 0;
}