Cod sursa(job #2386719)

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

using namespace std;

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

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;
}

vector<suma>a;

void afis(int x, int y){
    printf("%d %d %d %d %d %d",a[x].x1,a[x].x2,a[x].x3,a[y].x1,a[y].x2,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));
    nr=a.size();
    sort(a.begin(),a.end(),cmp);
    for (i=0;i<nr;i++){
        p=0;u=nr-1;
        while (p<=u&&!ok){
            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){
            afis(i,ok);
            break;
        }
    }
    if (!ok) printf("-1");
    return 0;
}