Cod sursa(job #2590121)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 27 martie 2020 15:49:08
Problema Loto Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#define dim 101
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
pair<int,int> r[dim*dim*dim];
int v[dim],n,s,i,sz;
int caut(int st,int dr,int x){
    ///caut fix val x
    while(st<=dr){
       int mid=(st+dr)/2;
    cout<<x<<" "<<r[mid].first<<"\n";
        if(r[mid].first>x){
            dr=mid-1;
        }
        else if(r[mid].first<x){
            st=mid+1;
        }
        else
        {
            return mid;
        }
    }
return 0; /// nua fost gasit
}
void afis(int x){
fout<<v[x%101]<<" "<<v[x/101%101]<<" "<<v[x/101/101]<<" ";
}
int main()
{
    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++)
        for(int k=j;k<=n;k++){
            r[++sz].first=v[i]+v[j]+v[k];
            if(r[sz].first>s){
                sz--;
                continue;
            }
            /// tin in baza 101 pt ca sunt indici pana la 100 si nu am nevoie de ei la afisat
            r[sz].second=i*101*101+j*101+k;
        }
    }
    sort(r+1,r+sz+1);
    for(int it=1;s>=2*r[it].first;it++){
        int rez=caut(it+1,sz,s-r[it].first);
        if(rez){
            afis(r[it].second);
            afis(r[rez].second);

            return 0;
        }
    }
    fout<<-1;
}