Cod sursa(job #2177919)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 18 martie 2018 21:53:41
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

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

int v[1000005];

int n, S, nr[105];
int p, poz, st, dr, s1, s2;
bool gata;

int main(){

   in>>n>>S;
   for( int i = 1; i <= n; i++ )
        in>>nr[i];

   for( int i = 1; i <= n; i++ )
        for( int j = 1; j <= n; j++ )
            for( int k = 1; k <= n; k++ )
            {
                p++;
                v[p] = nr[i] + nr[j] + nr[k];
            }

    sort( v + 1, v + p + 1  );

   int st = 1, dr = p;
   while( st <= dr )
   {
       while( v[st] + v[dr] > S )
            dr--;

       if( v[st] + v[dr] == S )
        {
            s1 = v[st];
            s2 = v[dr];
        }

       st++;
   }

   if( st > dr )
   {
       out<<-1;
       return 0;
   }

    gata = false;
    for( int i = 1; i <= n && !gata; i++ )
        for( int j = 1; j <= n && !gata; j++ )
            for( int k = 1; k <= n && !gata; k++ )
                if( nr[i] + nr[j] + nr[k] == s1 )
                {
                    out<<nr[i]<<" "<<nr[j]<<" "<<nr[k]<<" ";
                    gata = true;
                }

    for( int i = 1; i <= n; i++ )
        for( int j = 1; j <= n; j++ )
            for( int k = 1; k <= n; k++ )
                if( nr[i] + nr[j] + nr[k] == s2 )
                {
                    out<<nr[i]<<" "<<nr[j]<<" "<<nr[k]<<" ";
                }

   return 0;
}