Cod sursa(job #1241317)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 13 octombrie 2014 11:14:20
Problema Loto Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>

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

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

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

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

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

    sort(a+1, a+m+1, cmp);
    for(i=m;i>=0;i--)
    {
        y=caut(g-a[i].s);

        if(y)
        {
            printf("%u %u %u ", a[y].a, a[y].b, a[y].c);
            printf("%u %u %u ", a[i].a, a[i].b, a[i].c);
            return 0;
        }
    }
    printf("-1");
    return 0;
}