Cod sursa(job #1715086)

Utilizator giotoPopescu Ioan gioto Data 9 iunie 2016 22:34:17
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#include <bitset>
#include <algorithm>
using namespace std;

int j,t,mid,p,u,aux,n,i,sum,s,nr,a[102],sol[8];
struct elem{
    int s,a,b,c;
}su[1000002];
bool cmp(elem x,elem y){
    return x.s<y.s;
}
int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%d%d", &n, &s);
    for(i=1;i<=n;++i)
        scanf("%d", &a[i]);
    for(i=1;i<=n;++i){
        for(j=1;j<=n;++j){
            for(t=1;t<=n;++t){
                su[++nr].s=a[i]+a[j]+a[t];
                su[nr].a=a[i];
                su[nr].b=a[j];
                su[nr].c=a[t];
            }
        }
    }
    sort(su+1,su+nr+1,cmp);
    for(i=1;i<=nr;++i){
        p=1;u=nr;
        aux=s-su[i].s;
        if(aux>0)
        while(p<=u){
            mid=(p+u)/2;
            if(su[mid].s<aux) p=mid+1;
            else if(su[mid].s>aux) u=mid-1;
            else{
                sol[1]=su[mid].a;
                sol[2]=su[mid].b;
                sol[3]=su[mid].c;
                sol[4]=su[i].a;
                sol[5]=su[i].b;
                sol[6]=su[i].c;
                sort(sol+1,sol+7);
                for(i=1;i<=6;++i)
                    printf("%d ",sol[i]);
                return 0;
            }
        }
    }printf("-1");
    return 0;
}