Cod sursa(job #1209922)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 18 iulie 2014 21:12:44
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <algorithm>
using namespace std;
int v[101],s[1000002],i,j,k,n,suma,nr=0,sol1,sol2,cont=1;

bool cb(int st, int dr, int x)
{
    int med;
    while (st<=dr)
    {
        med=(st+dr)/2;
        if (s[med]==x)
        return 1;
        else
        if  (x>s[med])
        st=med+1;
        else
        dr=med-1;
    }
    return 0;
}
int main()
{
    ifstream f("loto.in");
    ofstream g("loto.out");
    f>>n>>suma;
    for (i=1; i<=n; i++) f>>v[i];

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




    sort (s+1,s+n*n*n+1);

    for (i=1; i<=n*n*n; i++)

        if (cb(i,n*n*n,suma-s[i])==1 && s[i]!=suma)
        {
            sol1=s[i];
            sol2=suma-s[i];
            break;
        }
        else sol1=-1;
   // g<<sol1<<" "<<sol2;
if (sol1!=-1)
{
   for (i=1; i<=n; i++)
   for (j=i; j<=n; j++)
   for (k=j; k<=n; k++)
   if (v[i]+v[j]+v[k]==sol1)
   {
       g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
       break;
       }

        for (i=1; i<=n; i++)
   for (j=i; j<=n; j++)
   for (k=j; k<=n; k++)
   if (v[i]+v[j]+v[k]==sol2)
   {
       g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
       break;
       }
}
else g<<"-1";


    return 0;
}