Cod sursa(job #1522580)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 11 noiembrie 2015 20:24:23
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <cstdio>
#define MAXN 100
#define MOD 666013
int v[MAXN],ind[MOD+1],next[MAXN*MAXN*MAXN+1],sum[MAXN*MAXN*MAXN+1];
int main(){
    FILE*fi,*fout;
    int i,j,z,nr1,nr2,nr3,nr4,nr5,nr6,flag,s1,s2,n,s,con;
    fi=fopen("loto.in" ,"r");
    fout=fopen("loto.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&s);
    for(i=0;i<n;i++)
       fscanf(fi,"%d" ,&v[i]);
    con=0;
    for(i=0;i<n;i++)
       for(j=i;j<n;j++)
           for(z=j;z<n;z++){
              con++;
              sum[con]=v[i]+v[j]+v[z];
              next[con]=ind[sum[con]];
              ind[sum[con]%MOD]=con;
           }
    flag=1;
    i=MOD-1;
    while(i>=0&&flag){
        j=ind[i];
        while(j>0&&flag){
            z=ind[(s%MOD-i%MOD+MOD)%MOD];
            while(z>0&&flag){
                if(sum[z]+sum[j]==s){
                    flag=0;
                    s1=sum[z];
                    s2=sum[j];
                }
                z=next[z];
            }
            j=next[j];
        }
        i--;
    }
    if(i==-1)
        fprintf(fout,"-1");
    else{
       i=0;
       while(i<n){
           j=i;
           while(j<n){
               z=j;
               while(z<n&&v[i]+v[j]+v[z]!=s1)
                  z++;
               if(z<n){
                  nr1=v[i];
                  nr2=v[j];
                  nr3=v[z];
               }
               z=j;
               while(z<n&&v[i]+v[j]+v[z]!=s2)
                  z++;
               if(z<n){
                  nr4=v[i];
                  nr5=v[j];
                  nr6=v[z];
               }
               j++;
           }
           i++;
       }
       fprintf(fout,"%d %d %d %d %d %d" ,nr1,nr2,nr3,nr4,nr5,nr6);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}