Cod sursa(job #1764821)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 25 septembrie 2016 22:09:35
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#define mod 666013
#define lim 105
int v[lim],lista[mod],next[lim*lim*lim],x[lim*lim*lim],y[lim*lim*lim],z[lim*lim*lim],s[lim*lim*lim],m;
int cauta(int val){
    int poz=lista[val%mod];
    while(poz!=0&&s[poz]!=val)
        poz=next[poz];
    return poz;
}
void adauga(int a,int b,int c){
     if(cauta(v[a]+v[b]+v[c])==0){
        m++;
        s[m]=v[a]+v[b]+v[c];
        x[m]=v[a];
        y[m]=v[b];
        z[m]=v[c];
        next[m]=lista[s[m]%mod];
        lista[s[m]%mod]=m;
     }
}
int main(){
    FILE *fin,*fout;
    fin=fopen("loto.in","r");
    fout=fopen("loto.out","w");
    int i,j,k,n,sum,poz;
    fscanf(fin,"%d%d",&n,&sum);
    for(i=1;i<=n;i++)
        fscanf(fin,"%d",&v[i]);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++)
                adauga(i,j,k);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++){
                poz=cauta(sum-(v[i]+v[j]+v[k]));
                if(poz!=0){
                    fprintf(fout,"%d %d %d %d %d %d",v[i],v[j],v[k],x[poz],y[poz],z[poz]);
                    fclose(fin);
                    fclose(fout);
                    return 0;
                }
            }
    fprintf(fout,"-1");
    fclose(fin);
    fclose(fout);
    return 0;
}