Cod sursa(job #1679807)

Utilizator antanaAntonia Boca antana Data 8 aprilie 2016 11:29:37
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include<algorithm>
#define MAX 100
using namespace std;
struct aa{
    int x, y, z, s;
}; aa sume[MAX*MAX*MAX+2], aux[MAX*MAX*MAX+1];
bool cresc(aa a, aa b)
{
    return (a.s<b.s);
}
int v[MAX+1], n;
inline int query(int a)
{
    int st, dr, mij;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(sume[mij].s==a)
            return mij;
        if(sume[mij].s>a)
            dr=mij-1;
        else st=mij+1;
    }
    return -1;
}
int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    int i, j, k, sum, m=0, a, poz;
    scanf("%d%d", &n, &sum);
    for(i=1;i<=n;i++)
        scanf("%d", &v[i]);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++){
                aux[++m].s=v[i]+v[j]+v[k];
                aux[m].x=v[i];
                aux[m].y=v[j];
                aux[m].z=v[k];
            }
    sort(aux+1, aux+m+1, cresc);
    n=0;
    for(i=1;i<=m;i++)
        if(aux[i].s!=aux[i-1].s)
            sume[++n]=aux[i];
    for(i=1;i<=n;i++)
    {
        a=sum-sume[i].s;
        poz=query(a);
        if(poz!=-1)
        {
            printf("%d %d %d %d %d %d", sume[i].x, sume[i].y, sume[i].z, sume[poz].x, sume[poz].y, sume[poz].z);
            return 0;
        }
    }
    printf("-1");
    return 0;
}