Cod sursa(job #1811802)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 21 noiembrie 2016 16:48:51
Problema Loto Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <stdio.h>
#include <stdlib.h>
#define MOD 666019
int nr,v[101],lista[MOD],next[100*100*100+1],a[100*100*100+1],b[100*100*100+1],c[100*100*100+1];
int main()
{
    int n,s,i,j,k,x,f;
    long long suma,z;
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d%d",&n,&s);
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++)
            {
                suma=(long long)v[i]+v[j]+v[k];
                if(lista[suma%MOD]==0)
                {
                    nr++;
                    a[nr]=v[i];
                    b[nr]=v[j];
                    c[nr]=v[k];
                    lista[suma%MOD]=nr;
                    next[nr]=0;
                }
                else
                {
                    x=lista[suma%MOD];
                    while(x!=0 && (long long)a[x]+b[x]+c[x]!=suma)
                        x=next[x];
                    if(x==0)
                    {
                        nr++;
                        a[nr]=v[i];
                        b[nr]=v[j];
                        c[nr]=v[k];
                        next[nr]=lista[suma%MOD];
                        lista[suma%MOD]=nr;
                    }
                }
            }
    f=1;
    for(i=1; i<=n && f; i++)
        for(j=1; j<=n && f; j++)
            for(k=1; k<=n && f; k++)
            {
                suma=(long long)v[i]+v[j]+v[k];
                z=s-suma;
                if(z>0)
                {
                    x=lista[z%MOD];
                    while(x!=0 && (long long)a[x]+b[x]+c[x]!=z)
                        x=next[x];
                    if(x!=0)
                    {
                        f=0;
                        printf("%d %d %d %d %d %d\n",a[x],b[x],c[x],v[i],v[j],v[k]);
                    }
                }
            }
    if(f==1)
        printf("-1\n");

    return 0;
}