Cod sursa(job #1184395)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 12 mai 2014 15:41:06
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fn("loto.in");
ofstream fout("loto.out");
const int mod=7013;
struct sum
{
    int tot,x,y,z;
};
vector <sum> x[mod];
vector <sum>::iterator it;
int v[101],fin[6];
sum ur[1000019];
int nr;
inline void adauga(int u,int y,int z)
{
    sum pas;
    pas.tot=u+y+z;
    pas.x=u;
    pas.y=y;
    pas.z=z;
    x[pas.tot%mod].push_back(pas);
    ur[nr++]=pas;
}
inline bool cauta(int su)
{
    int zum=su%mod;
    for(it=x[zum].begin();it!=x[zum].end();it++)
    {
        if(it->tot==su)
        {
            fin[0]=it->x;fin[1]=it->y;fin[2]=it->z;
            return true;
        }
    }
    return false;
}
int main()
{
    int i,j,n,s,r;
    bool ok=false;
    fn>>n>>s;
    for(i=1;i<=n;i++) fn>>v[i];
    for(i=1;i<=n;i++)
    {   adauga(v[i],v[i],v[i]);
        for(j=i+1;j<=n;j++)
        {   adauga(v[i],v[i],v[j]);
            adauga(v[j],v[j],v[i]);
            for(r=j+1;r<=n;r++)
            {
                adauga(v[i],v[j],v[r]);
                adauga(v[r],v[r],v[i]);
                adauga(v[r],v[r],v[j]);
            }
        }
    }
    for(i=n-2;i<=n;i++)
    {
        adauga(v[i],v[i],v[i]);
    }
    for(i=0;i<n*n*n;i++)
    {
        if(s-ur[i].tot>0)
        {
            ok=cauta(s-ur[i].tot);
            if(ok==true)
         {
             fin[3]=ur[i].x;fin[4]=ur[i].y;fin[5]=ur[i].z;
             sort(fin,fin+6);
             for(i=0;i<6;i++) fout<<fin[i]<<" ";
            break;
            }
        }
    }
    if(ok==false) fout<<-1;
}