Cod sursa(job #1385731)

Utilizator usermeBogdan Cretu userme Data 12 martie 2015 11:53:20
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <cstdio>
#include <unordered_map>
#include <algorithm>

using namespace std;

unordered_map<int,int> has;

FILE*f=fopen("loto.in","r");
FILE*h=fopen("loto.out","w");

int n,s,val[101];

int main(){
    fscanf(f,"%d%d",&n,&s);
    for ( int i=0;i<n;++i ){
        fscanf(f,"%d",&val[i]);
    }
    sort(val,val+n);
    has.rehash(260000);
    for ( int i=0;i<n;++i )
        for ( int j=0;j<n;++j )
            for ( int k=0;k<n;++k )
                has[val[i]+val[j]+val[k]]=1;
    for ( int i=0;i<n;++i ){
        for ( int j=0;j<n;++j ){
            if ( val[i]+val[j]>s )
                break;
            for ( int k=0;k<n;++k ){
                if ( val[i]+val[j]+val[k]>s )
                    break;
                if ( has[s-val[i]-val[j]-val[k]] ){
                    s-=val[i]+val[j]+val[k];
                    fprintf(h,"%d %d %d ",val[i],val[j],val[k]);
                    for ( int i1=0;i1<n;++i1 ){
                        for ( int j1=0;j1<n;++j1 ){
                            if ( val[i1]+val[j1]>s )
                                break;
                            for ( int k1=0;k1<n;++k1 ){
                                if ( val[i1]+val[j1]+val[k1]>s )
                                    break;
                                if ( val[i1]+val[j1]+val[k1]==s ){
                                    fprintf(h,"%d %d %d",val[i1],val[j1],val[k1]);
                                    return 0;
                                }
                            }
                        }
                    }
                    return 0;
                }
            }
        }
    }
    fprintf(h,"-1");
    return 0;
}