Cod sursa(job #2533518)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 29 ianuarie 2020 11:22:30
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <iostream>
#include <fstream>
#include <algorithm>


using namespace std;

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

int v[1000000],numere[300];

int main()
{
    int s,n,i,j,k,nr,i2,dif,step,pos,s1,s2;
    int ok=0 ,b=0, c=0;
    fin >> n;
    fin >> s;
    for(i=0;i<3*n;i++)
    {
        fin >> nr;
        numere[i]=nr;
        i++;
        numere[i]=nr;
        i++;
        numere[i]=nr;

    }

    sort(numere,numere+3*n-1);
    i2=0;
    for(i=0;i<3*n-2;i++)
    {
        for(j=i+1;j<3*n-1;j++)
        {
            for(k=j+1;k<3*n;k++)
            {
                v[i2]=numere[i]+numere[j]+numere[k];
                i2++;
            }
        }
    }
    i=0;
    ok=0;
    while(i<i2 && ok==0)
    {
        dif=s-v[i];
        pos=-1;
        step=524288;
        while(step>0)
        {
            if((pos+step)<n && v[pos+step]<=dif)
                pos+=step;

            step=step>>1;
        }

        if(v[pos]==dif)
        {
            ok=1;
            s1=v[i];
            s2=v[pos];
        }
        i++;
    }
    ok=0;
    i=0;
    while(i<3*n-2)
    {
        j=0;
        while(j<3*n-1)
        {
            k=0;
            while( k<3*n)
            {
                if((numere[i]+numere[j]+numere[k])==s1 && b!=1)
                {
                    ok++;
                    fout << numere[i] << " " << numere[j] << " " << numere[k] << " ";
                    b=1;
                }
                if((numere[i]+numere[j]+numere[k])==s2 && c!=1)
                {
                    ok++;
                    fout << numere[i] << " " << numere[j] << " " << numere[k] << " ";
                    c=1;
                }
                if(ok==2)
                    return 0;
                k++;
            }
            j++;
        }
        i++;
    }
    fout << -1;


    return 0;
}