Cod sursa(job #1715093)

Utilizator giotoPopescu Ioan gioto Data 9 iunie 2016 22:39:02
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 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=i;j<=n;++j){
            for(t=j;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<=n;++i){
        for(j=i;j<=n;++j){
            for(t=j;t<=n;++t){
                p=1;u=nr;
                aux=s-a[i]-a[j]-a[t];
                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]=a[i];
                        sol[5]=a[j];
                        sol[6]=a[t];
                        sort(sol+1,sol+7);
                        for(i=1;i<=6;++i)
                            printf("%d ",sol[i]);
                        return 0;
                    }
                }
            }
        }
    }printf("-1");
    return 0;
}