Cod sursa(job #1761727)

Utilizator nnnmmmcioltan alex nnnmmm Data 22 septembrie 2016 19:38:43
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
const unsigned int NMAX=100,MOD=647013;
unsigned int v[NMAX+1];
struct sol{unsigned int x[4];};
std::vector<std::pair<unsigned int,sol> > map[MOD];

void Add(unsigned int val,sol x)
{
 unsigned int r=val%MOD;
 map[r].push_back(std::make_pair(val,x));
}

sol Get_Val(unsigned int val)
{
 unsigned int r=val%MOD;
 for(int i=0;i<map[r].size();i++)
     if(map[r][i].first==val)
        return map[r][i].second;
 sol nu;
 nu.x[0]=-1;
}

int main()
{
 FILE *file=fopen("loto.in","r");
 unsigned int n,s;
 fscanf(file,"%u %u ",&n,&s);
 for(unsigned int i=1;i<=n;i++)
     fscanf(file,"%u ",&v[i]);
 fclose(file);

 for(unsigned int x1=1;x1<=n;x1++)
     {
      for(unsigned int x2=1;x2<=n;x2++)
          {
           for(unsigned int x3=1;x3<=n;x3++)
               {
                sol a;
                a.x[0]=0;
                a.x[1]=x1,a.x[2]=x2,a.x[3]=x3;
                Add(v[x1]+v[x2]+v[x3],a);
               }
          }
     }

 file=fopen("loto.out","w");
 std::vector<unsigned int> rasp;
 for(unsigned int x1=1;x1<=n;x1++)
     {
      for(unsigned int x2=1;x2<=n;x2++)
          {
           for(unsigned int x3=1;x3<=n;x3++)
               {
                sol a=Get_Val(s-(v[x1]+v[x2]+v[x3]));
                if(a.x[0]==0)
                   {
                    rasp.push_back(x1);
                    rasp.push_back(x2);
                    rasp.push_back(x3);
                    for(unsigned int i=1;i<=3;i++)
                        rasp.push_back(a.x[i]);
                    std::sort(rasp.begin(),rasp.end());
                    for(unsigned int i=0;i<rasp.size();i++)
                        fprintf(file,"%u ",rasp[i]);
                    fclose(file);
                    return 0;
                   }
               }
          }
     }
 fprintf(file,"-1\n");
 fclose(file);
 return 0;
}