Cod sursa(job #1769391)

Utilizator Moise_AndreiMoise Andrei Moise_Andrei Data 2 octombrie 2016 14:50:55
Problema Loto Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
struct index
{
    int i1, i2, i3;
    int sum;
};
ifstream in("loto.in");
ofstream out("loto.out");
const int maxn = 105;
int v[maxn];
int m;
index a[maxn * maxn * maxn];
bool cmp(index a, index b)
{
    return a.sum < b.sum;
}

int exista(int x)
{
    int st = 1, dr = m;
    while(st <= dr)
    {
        int mij = (st + dr) / 2;
        if(a[mij].sum == x)
            return mij;
        if(a[mij].sum < x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    return -1;
}
int main()
{
    int n, s;
    in  >> n >> s;
    for(int i = 1; i <= n; i ++)
        in >> v[i];
    m = 0;
    for(int i1 = 1; i1 <= n; i1 ++)
    {
        for(int i2 = i1; i2 <= n; i2 ++)
        {
            for(int i3 = i2; i3 <= n; i3 ++)
            {
                m ++;
                a[m].i1 = i1;
                a[m].i2 = i2;
                a[m].i3 = i3;
                a[m].sum = v[i1] + v[i2] + v[i3];
            }
        }
    }
    sort(a + 1, a + m + 1, cmp);
    for(int i = 1; i <= m; i ++)
    {
        int j = exista(s - a[i].sum);
        if(j != -1)
        {
            out << v[a[i].i1] << " " << v[a[i].i2] << " " << v[a[i].i3] << " ";
            out << v[a[j].i1] << " " << v[a[j].i2] << " " << v[a[j].i3] << '\n';
            out.close();
            return 0;
        }
    }
    out << "-1";
    return 0;
}