Cod sursa(job #1765669)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 26 septembrie 2016 21:43:32
Problema Loto Scor 85
Compilator c Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#define MAX_N 1000000
#define MOD 702113
int v[100],hash[MOD],val[MAX_N+1],next[MAX_N+1],m,baza[MAX_N+1];
inline int caut(int x)
{
    int p=hash[x%MOD];
    while(p && val[p]!=x)
        p=next[p];
    return p;
}
inline void add(int s)
{
    if(!caut(s))
    {
        int p=hash[s%MOD];
        val[++m]=s;
        next[m]=p;
        hash[s%MOD]=m;
    }
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("loto.in","r");
    fout=fopen("loto.out","w");
    int n,s,i,j,k,p;
    char ok=0;
    fscanf(fin,"%d%d",&n,&s);
    for(i=0;i<n;i++)
        fscanf(fin,"%d",&v[i]);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            for(k=0;k<n;k++)
                if(v[i]+v[j]+v[k]<s)
                {
                    add(v[i]+v[j]+v[k]);
                    baza[m]=i*n*n+j*n+k;
                }
    for(i=0;i<n && !ok;i++)
        for(j=0;j<n && !ok;j++)
            for(k=0;k<n && !ok;k++)
                if(v[i]+v[j]+v[k]<s && (p=caut(s-v[i]-v[j]-v[k])))
                {
                    fprintf(fout,"%d %d %d %d %d %d",v[i],v[j],v[k],v[(baza[p]/(n*n))],v[(baza[p]/n)%n],v[baza[p]%n]);
                    ok=1;
                }
    if(!ok)
        fprintf(fout,"-1");
    fclose(fin);
    fclose(fout);
    return 0;
}