Cod sursa(job #3037570)

Utilizator BuruianaRaresAndreiBuruiana Rares Andrei BuruianaRaresAndrei Data 25 martie 2023 20:15:33
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <fstream>
#include <algorithm>
#define NMAX 102

using namespace std;

ifstream cin("loto.in");
ofstream cout("loto.out");

int n, sumfin, total, crt;
int st, dr, mij, dif;
int v[NMAX];
struct Sume
{
 int suma;
 int unu, doi, trei;
}sume[NMAX * NMAX * NMAX];

bool sortaresuma(Sume a, Sume b)
{
 return a.suma < b.suma;
}

int main()
{
 ios_base::sync_with_stdio(false);
 cin.tie(0); cout.tie(0);

 int i, j, k;
 cin >> n >> sumfin;
 for(i = 1; i <= n; i++)
     cin >> v[i];

 sort(v + 1, v + n + 1);
 total = 0;
 for(i = 1; i <= n; i++)
    {
     for(j = 1; j <= n; j++)
        {
         for(k = 1; k <= n; k++)
            {
             sume[++total].suma = v[i] + v[j] + v[k];
             sume[total].unu = i;
             sume[total].doi = j;
             sume[total].trei = k;
            }
        }
    }
 ///sort(sume + 1, sume + total + 1, sortaresuma);
 for(i = 1; i <= n; i++)
    {
     for(j = 1; j <= n; j++)
        {
         for(k = 1; k <= n; k++)
            {
             crt = v[i] + v[j] + v[k];
             dif = sumfin - crt;
             st = 0; dr = total + 1;
             while(dr - st > 1)
                  {
                   mij = (st + dr) / 2;
                   if(sume[mij].suma >= dif)
                      dr = mij;
                   else st = mij;
                  }
             if(dr <= total && sume[dr].suma == dif)
               {
                cout << v[i] << ' ';
                cout << v[j] << ' ';
                cout << v[k] << ' ';
                cout << sume[dr].unu << ' ';
                cout << sume[dr].doi << ' ';
                cout << sume[dr].trei << '\n';
                return 0;
               }
            }
        }
    }
 cout << "-1\n";
 return 0;
}