Cod sursa(job #1184302)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 12 mai 2014 00:17:58
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
const int mod=666013;
struct sum
{
    int tot,x,y,z;
};
vector <sum> x[mod];
vector <sum>::iterator it;
int v[101];
sum ur[1000009];
inline bool cauta(int su)
{
    int zum=su%mod;
    for(it=x[zum].begin();it!=x[zum].end();it++)
    {
        if(it->tot==su)
        {
            fout<<it->x<<" "<<it->y<<" "<<it->z<<" ";
            return true;
        }
    }
    return false;
}
int main()
{
    int i,j,n,s,nr=0,r;
    bool ok=false;
    fin>>n>>s;
    sum pas;
    for(i=1;i<=n;i++) fin>>v[i];
    for(i=1;i<=n-2;i++)
    {   pas.tot=3*v[i];
        pas.x=pas.y=pas.z=v[i];
        x[pas.tot%mod].push_back(pas);
        ur[nr++]=pas;
        for(j=i+1;j<=n-1;j++)
        {   pas.tot=2*v[i]+v[j];
            pas.x=pas.y=v[i];pas.z=v[j];
            x[pas.tot%mod].push_back(pas);
            ur[nr++]=pas;
            pas.tot=2*v[j]+v[i];
            pas.x=pas.y=v[j];pas.z=v[i];
            x[pas.tot%mod].push_back(pas);
            ur[nr++]=pas;
            for(r=j+1;r<=n;r++)
            {
                pas.tot=v[i]+v[j]+v[r];
                pas.x=v[i];
                pas.y=v[j];
                pas.z=v[r];
                x[pas.tot%mod].push_back(pas);
                ur[nr++]=pas;

            pas.tot=2*v[r]+v[j];
            pas.x=pas.y=v[r];pas.z=v[j];
            x[pas.tot%mod].push_back(pas);
            ur[nr++]=pas;
            pas.tot=2*v[r]+v[i];
            pas.x=pas.y=v[r];pas.z=v[i];
            x[pas.tot%mod].push_back(pas);
            ur[nr++]=pas;
            }
        }
    }
    for(i=n-1;i<=n;i++)
    {
        pas.tot=3*v[i];
        pas.x=pas.y=pas.z=v[i];
        x[pas.tot%mod].push_back(pas);
        ur[nr++]=pas;
    }
    for(i=0;i<n*n*n;i++)
    {
        ok=cauta(s-ur[i].tot);
        if(ok==true)
         {
            fout<<ur[i].x<<" "<<ur[i].y<<" "<<ur[i].z<<"\n";
            break;
        }
    }
    if(ok==false) fout<<-1;
}