Cod sursa(job #2328317)

Utilizator stefan1anubystefan popa stefan1anuby Data 25 ianuarie 2019 17:08:49
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
#define nmax 50
vector < pair <int,int > > s;
int v[nmax*nmax*nmax/4][3];
int nr[nmax];
int n,sum;
int sol[10],ok;
void read()
{
    int i;
    cin>>n>>sum;
    for(i=1; i<=n; i++)
        cin>>nr[i];
}
void make_partitions()
{
    int i,j,part=0,h,b;
    for(i=1; i<=n; i++)
        for(j=i; j<=n; j++)
            for(h=j; h<=n; h++)
            {
                part++;
                v[part][1]=nr[i];
                v[part][2]=nr[j];
                v[part][3]=nr[h];
                b=v[part][1]+v[part][2]+v[part][3];
                s.push_back({b,part});
            }
}
int solve()
{
    int i,st,dr,mid,x,poz1,poz2,j;
    sort(s.begin(),s.end());
    for(i=0; i<s.size(); i++)
    {
        x=sum-s[i].first;
        st=0;
        dr=s.size()-1;
        while(st<=dr)
        {
            mid=(st+dr)/2;
            if(s[mid].first==x)
            {
                poz1=s[mid].second;
                poz2=s[i].second;
                sol[1]=v[poz1][1];
                sol[2]=v[poz1][2];
                sol[3]=v[poz1][3];
                sol[4]=v[poz2][1];
                sol[5]=v[poz2][2];
                sol[6]=v[poz2][3];
                sort(sol+1,sol+7);
                for(j=1; j<=6; j++)
                    cout<<sol[j]<<" ";
                return 0;
            }
            else if(s[mid].first<x)
                st=mid+1;
            else
                st=mid-1;
        }
    }
    cout<<-1;
    return 0;
}
int main()
{
    read();
    make_partitions();
    solve();
    return 0;
}