Cod sursa(job #2182230)

Utilizator BlkAlexAlex Negru BlkAlex Data 22 martie 2018 11:22:22
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define nrmare 1000000

using namespace std;

ifstream f("loto.in");
ofstream g("loto.out");

long long n, rez, a[150], lnx;
struct sum {int s1, s2, s3, s;};
sum v[nrmare];

bool cmp (sum x, sum y){
    return x.s<y.s;
}

void dostuff(){
    int i, j, k, ln;
    f>>n>>rez;
    for (i=1; i<=n; i++){
        f>>a[i];
    }
    ln=1;
    for (i=1; i<=n; i++){
        for (j=i; j<=n; j++){
            for (k=j; k<=n; k++){
                v[ln].s1=a[i];
                v[ln].s2=a[j];
                v[ln].s3=a[k];
                v[ln].s=a[i]+a[j]+a[k];
                ln++;
            }
        }
    }
    ln--;
    sort (v, v+ln, cmp);
    lnx=ln;
}

void domorestuff(){
    int i, ec, ls, ld, m;
    for (i=1; i<=lnx; i++){
        ec=rez-v[i].s;
        ls=1; ld=lnx;
        while (ls<=ld){
            m=(ls+ld)/2;
            if (v[m].s==ec){
                g<<v[i].s1<<" "<<v[i].s2<<" "<<v[i].s3<<" ";
                g<<v[m].s1<<" "<<v[m].s2<<" "<<v[m].s3<<" ";
                return;
            } else {
                if (v[m].s<ec){
                    ls=m+1;
                }
                if (v[m].s>ec){
                    ld=m-1;
                }
            }
        }
    }
    g<<"-1";
}

int main()
{
    dostuff();
    domorestuff();
    return 0;
}