Cod sursa(job #2605331)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 24 aprilie 2020 19:18:20
Problema Loto Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>

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

int v[100],sum[171701];

int main()
{
    int n,i,j,k,p,S,suma1=0,suma2=0;
    fin >> n >> S;
    p=0;
    for(i=0;i<n;i++)
        fin >> v[i];
    for(i=0;i<=n;i++)
        for(j=i;j<n;j++)
            for(k=j;k<n;k++)
                sum[p++]=v[i]+v[j]+v[k];

    sort(sum,sum+p);
    int step,pos,e;
    bool ok=0,ok1,ok2;
    for(i=0;i<p && ok==0;i++)
    {
        step=1<<18;
        pos=-1;
        e=S-sum[i];
        while(step>0)
        {
            if(pos+step<p)
                if(sum[pos+step]<e)
                    pos+=step;
            step=(step>>1);
        }
        if(sum[pos+1]==e)
        {
            suma1=sum[pos+1];
            suma2=sum[i];
            ok=1;
        }
    }
    ok1=0;
    ok2=0;
    for(i=0;i<=n;i++)
        for(j=i;j<n;j++)
            for(k=j;k<n;k++)
            {
                if(ok1==0)
                    if(v[i]+v[j]+v[k]==suma1)
                    {
                        ok1=1;
                        fout << v[i] << " " << v[j]<< " " << v[k] << " ";
                    }
                if(ok2==0)
                    if(v[i]+v[j]+v[k]==suma2)
                {
                    ok2=1;
                    fout << v[i] << " " << v[j]<< " " << v[k] << " ";
                }
            }
    if(ok1==0 || ok2==0)
        fout << -1;

    return 0;
}