Cod sursa(job #2692734)

Utilizator iulia_udreaIulia Udrea iulia_udrea Data 3 ianuarie 2021 16:30:47
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <algorithm>
#include<vector>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
struct perechi{
    int suma,a,b,c;
};
vector<perechi>v;
vector<int>x;
int cmp(perechi a,perechi b)
{
    return (a.suma<b.suma);
}
int cautare(int val)
{
    int mj,st,dr;
    st=0;dr=v.size()-1;
    while(st<=dr)
    {
        mj=(st+dr)/2;
        if(v[mj].suma==val)return mj;
            else if(v[mj].suma<val)st=mj+1;
            else dr=mj-1;
    }
    return -1;
}
int main()
{
    int n,s,i,j,k,a,val,poz1,poz2;
    int sol[7];
    perechi p;
    cin>>n>>s;
    for(i=1;i<=n;i++)
    {
        cin>>a;
        x.push_back(a);
        for(j=0;j<x.size();j++)
            for(k=0;k<=j;k++)
        {
            p.suma=a+x[j]+x[k];
            p.a=a;
            p.b=x[j];
            p.c=x[k];
            v.push_back(p);
        }
    }
    sort(v.begin(),v.end(),cmp);
    int gasit=0;
    for(i=0;i<v.size()&&!gasit;i++)
    {
        val=s-v[i].suma;
        poz2=cautare(val);
        if(poz2!=-1)
        {
            gasit=1;
            poz1=i;
        }

    }
//    for(i=0;i<v.size();i++)
//        cout<<v[i].suma<<" "<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<endl;

    if(!gasit)cout<<-1;
    else
    {
        sol[0]=v[poz1].a;
        sol[1]=v[poz1].b;
        sol[2]=v[poz1].c;
        sol[3]=v[poz2].a;
        sol[4]=v[poz2].b;
        sol[5]=v[poz2].c;
        sort(sol,sol+6);
        for(i=0;i<6;i++)
            cout<<sol[i]<<" ";
    }
}