Cod sursa(job #2332359)

Utilizator vladadAndries Vlad Andrei vladad Data 30 ianuarie 2019 17:53:28
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");

int n,s,i,j,l,nr,st,dr,m,nd,md=200003;
int v[105];
struct per
{
    int s,t1,t2,t3;
    bool operator<(const per &alt)const
    {
        return s<alt.s;
    }
} z,d[1000005];
vector<per> H[200003];

int main()
{

    fin>>n>>s;
    for(i=1; i<=n; i++)
        fin>>v[i];

    for(i=1; i<=n; i++)
        for(j=i; j<=n; j++)
            for(l=j; l<=n; l++)
                nr=v[i]+v[j]+v[l], H[nr%md].push_back({nr, v[i], v[j], v[l]});

    for(i=1; i<md; i++)
        for(auto j:H[i])
            if(d[nd].s!=j.s)	d[++nd]=j;
    sort(d+1,d+nd+1);

    for(i=1; i<=n; i++)
        for(j=i; j<=n; j++)
            for(l=j; l<=n; l++)
            {
                nr=s-(v[i]+v[j]+v[l]);

                int st,p;
                for(st=1; st<nd; st<<=1);
                for(p=0; st; st>>=1)
                    if(p+st<=nd && d[p+st].s<=nr)
                        p+=st;

                if(d[p].s==nr)
                {
                    fout<<v[i]<<" "<<v[j]<<" "<<v[l]<<" "<<d[p].t1<<" "<<d[p].t2<<" "<<d[p].t3<<"\n";
                    return 0;
                }
            }
    fout<<-1<<"\n";
}