Cod sursa(job #1372371)

Utilizator DanielStratoneDaniel Stratone DanielStratone Data 4 martie 2015 13:07:40
Problema Loto Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
long long v[105],s[1000005],i,j,k,n,suma,nr=0,sol1,sol2,cont=1;
int 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;

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;
}