Cod sursa(job #1833279)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 22 decembrie 2016 00:15:44
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <cstdio>

using namespace std;

const int prim=103,mod=2000007;

int hashh[mod+1],v[110];

void add_hash(int x)
{
    int y=(1LL*x*prim)%mod;
    while(hashh[y]!=0 && hashh[y]!=x)
    {
        y++;
        if(y==mod) y=0;
    }
    hashh[y]=x;
}

int find_hash(int x)
{
    int y=(1LL*x*prim)%mod;
    int p=0;
    while(hashh[y]!=0)
    {
        if(hashh[y]=x) {p=1;break;}
        y++;
        if(y==mod) y=0;
    }
    return p;
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int n,s,sol=-1,r4,r5,r6,a,p;
    scanf("%d%d",&n,&s);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                add_hash(v[i]+v[j]+v[k]);
    p=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            for(int k=1;k<=n;k++)
            {
                a=v[i]+v[j]+v[k];
                a=s-a;
                if(a>=0) if(find_hash(a)==1) {r4=v[i];r5=v[j];r6=v[k];sol=a;p=1;break;}
            }
            if(p==1) break;
        }
        if(p==1) break;
    }
    if(sol==-1) {printf("-1");return 0;}
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                if(v[i]+v[j]+v[k]==sol) {printf("%d %d %d ",v[i],v[j],v[k]);printf("%d %d %d",r4,r5,r6);return 0;}
    return 0;
}