Cod sursa(job #1689483)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 14 aprilie 2016 12:03:25
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
long long sum,n,v[1005],i,j,h,st,dr,mid,ok,k,sud;
pair< pair<long long , long long> , pair<long long , long long> > s[1000001];

int main ()
{
    fin>>n>>sum;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(h=j;h<=n;h++)
            {
                s[++k].first.first=v[i]+v[j]+v[h];
                s[k].first.second=v[i];
                s[k].second.first=v[j];
                s[k].second.second=v[h];
            }
    sort(s+1, s+1+k);
    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(h=j;h<=n;h++)
            {
                sud=sum-v[i]-v[j]-v[h];
                st=1;
                dr=k;
                while(st<=dr)
                {
                    mid=(st+dr)/2;
                    if(s[mid].first.first==sud)
                    {
                        fout<<v[i]<<" ";
                        fout<<v[j]<<" ";
                        fout<<v[h]<<" ";
                        fout<<s[mid].first.second<<" ";
                        fout<<s[mid].second.first<<" ";
                        fout<<s[mid].second.second;
                        ok=1;
                        return 0;
                    }
                    else
                        if(s[mid].first.first>sud)
                            dr=mid-1;
                        else
                            st=mid+1;
            }
            if(ok==1)
                break;
        }
    if(ok==0)
        fout<<-1;
    fin.close();
    fout.close();
    return 0;
}