Cod sursa(job #2141808)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 24 februarie 2018 16:24:24
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

struct RASENGAN{
int su,a,b,c;
};

bool cmp(RASENGAN &x,RASENGAN &y)
{
    return x.su < y.su;
}

vector<int>v;
vector<RASENGAN>s;

inline int bs(int &x)
{
    int st = 0;
    int dr = s.size()-1;
    int med;
    while(st <= dr)
    {
        med = (st+dr)/2;
        if(s[med].su < x)
            st = med+1;
        else if(s[med].su > x)
            dr = med-1;
        else
            return med;
    }
    return -1;
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int n , S , x ;
    scanf("%d%d",&n,&S);
    for(int i = 1 ; i <= n ; i++)
        {
            scanf("%d",&x);
            v.push_back(x);
        }
    RASENGAN temp;
    for(int i = 0 ; i < v.size()-2 ; i++)
        for(int j = i+1 ; j < v.size()-1 ; j++)
            for(int k = i+2 ; k < v.size() ; k++)
            {
                int sm;
                sm = v[i] + v[j] + v[k];
                temp.a = v[i];
                temp.b = v[j];
                temp.c = v[k];
                temp.su = sm;
                s.push_back(temp);
            }
    sort(s.begin(),s.end(),cmp);
    for(int i = 0 ; i < v.size() ; i++)
        for(int j = 0 ; j < v.size() ; j++)
            for(int k = 0 ; k < v.size() ; k++)
            {
                int sm;
                sm = v[i] + v[j] + v[k];
                int d = S - sm;
                int r = bs(d);
                if(r != -1)
                {
                    printf("%d %d %d %d %d %d",v[i],v[j],v[k],s[r].a,s[r].b,s[r].c);
                    return 0;
                }
            }
    return 0;
}