Cod sursa(job #1241306)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 13 octombrie 2014 10:49:35
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;
struct elem
{
    long long a, b, c;
    long long s;
}x;
long long n, y, g, m, i, j, k, s, v[105];

vector <elem> a;

bool cmp(elem a, elem b)
{
    return a.s<b.s;
}

long long caut(long long f)
{
    long long p=0,u=m;
    long long sol=-1;
    while(p<=u)
    {
        long long mij=p+(u-p)/2;
        x=a[mij];
        if(x.s==f)
            return mij;
        if(x.s>f) u=mij-1;
        else p=mij+1;
    }
    return -1;
}

int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%lld%lld", &n, &g);
    for(i=1;i<=n;i++)
        scanf("%lld", &v[i]);

    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(k=1;k<=n;k++)
            {
                x.a=v[i],x.b=v[j],x.c=v[k];
                x.s=v[i]+v[j]+v[k];
                a.push_back(x);
            }

    sort(a.begin(), a.end(), cmp);
    m=a.size()-1;
    for(i=0;i<=m;i++)
    {
        x=a[i];
        s=x.s;
        y=caut(g-s);
        if(y!=-1)
        {
            x=a[i];
            printf("%lld %lld %lld ", x.a, x.b, x.c);
            x=a[y];
            printf("%lld %lld %lld ", x.a, x.b, x.c);
            return 0;
        }
    }
    printf("-1");
    return 0;
}