Cod sursa(job #430378)

Utilizator APOCALYPTODragos APOCALYPTO Data 30 martie 2010 22:31:15
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define maxh 666013
long long n,s,a[128];
struct nod{
    long long sum;
    nod *leg;
};
nod *H[maxh];

void cit()
{long long i;
ifstream fin("loto.in");
fin>>n>>s;
for(i=1;i<=n;i++)
   fin>>a[i];
fin.close();


}

void insereaza(int v)
{
int h=v%maxh;
nod *p;
 for(p=H[h];p;p=p->leg)
    if(p->sum==v)
      return;
  p=new nod;
  p->leg=H[h];
  p->sum=v;
  H[h]=p;

}
int exista(int v)
{
    int h=v%maxh;
    nod *p;
    for(p=H[h];p;p=p->leg)
       if(p->sum==v)
        return 1;
    return 0;
}
int main()
{long long i,j,k,ii,jj,kk;
    cit();
    ofstream fout("loto.out");

    for(i=1;i<=n;i++)
     for(j=i;j<=n;j++)
      for(k=j;k<=n;k++)
       insereaza(a[i]+a[j]+a[k]);
    for(i=1;i<=n;i++)
      for(j=i;j<=n;j++)
       for(k=j;k<=n;k++)
       {
           if(exista(s-a[i]-a[j]-a[k])) ////////////////////ALTRO IF
                 for(ii=1;ii<=n;ii++)
                  for(jj=ii;jj<=n;jj++)
                   for(kk=jj;kk<=n;kk++)
                    if(s-a[i]-a[j]-a[k]-a[ii]-a[jj]-a[kk]==0)
                     {fout<<a[i]<<" "<<a[j]<<" "<<a[k]<<" "<<a[ii]<<" "<<a[jj]<<" "<<a[kk];
                     fout<<'\n';
                     return 0;}
       }

    fout<<"-1";
    fout<<'\n';
    fout.close();


    return 0;
}