Cod sursa(job #2386722)

Utilizator mateibanuBanu Matei Costin mateibanu Data 23 martie 2019 16:22:00
Problema Loto Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

int n,i,s,nr,v[110],p,u,ok=-1;

struct suma{
    int s,x1,x2,x3;
    /*suma(int ss,int xx1, int xx2, int xx3){
        s=ss;
        x1=xx1;
        x2=xx2;
        x3=xx3;
    }*/
};

int cmp(suma a, suma b){
    return a.s<=b.s;
}

suma a[1000010];

void afis(int x, int y){
    printf("%d %d %d %d %d %d",v[a[x].x1],v[a[x].x2],v[a[x].x3],v[a[y].x1],v[a[y].x2],v[a[y].x3]);
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d%d",&n,&s);
    for (int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for (int i=1;i<=n;i++)
        for (int j=i;j<=n;j++)
            for (int k=j;k<=n;k++){
                //a.push_back(suma(v[i]+v[j]+v[k],i,j,k));
                a[nr].s=v[i]+v[j]+v[k];
                a[nr].x1=i;
                a[nr].x2=j;
                a[nr].x3=k;
                nr++;
            }
    sort(a,a+nr,cmp);
    for (i=0;i<nr;i++){
        p=0;u=nr-1;
        while (p<=u&&ok==-1){
            int mij=(p+u)/2;
            if (a[mij].s<s-a[i].s) {p=mij+1;continue;}
            if (a[mij].s>s-a[i].s) {u=mij-1;continue;}
            if (a[mij].s==s-a[i].s) ok=mij;

        }
        if (ok!=-1){
            afis(i,ok);
            break;
        }
    }
    if (ok==-1) printf("-1");
    return 0;
}