Cod sursa(job #2669623)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 7 noiembrie 2020 13:09:51
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>
using namespace std;
int n, s, cnt, a[105];
struct loto{
    int s, x1, x2, x3;
}suma[105];
bool comp(loto w, loto z)
{
    return w.s > z.s;
}
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", &a[i]);
    }

    for (int i=1;i<=n;i++){
        for (int j=i;j<=n;j++){
            for (int k=j;k<=n;k++){
                suma[++cnt].s = a[i] + a[j] + a[k];
                suma[cnt].x1 = a[i];
                suma[cnt].x2 = a[j];
                suma[cnt].x3 = a[k];
            }
        }
    }
    sort(suma+1, suma+cnt+1, comp);
    for (int i=1;i<=cnt;i++){
        int s1 = s - suma[i].s;
        int st = 1, dr = cnt;
        while(dr - st > 1){
            int mijloc = (st+dr)/2;
            if (suma[mijloc].s == s1){
                printf("%d %d %d %d %d %d\n", suma[i].x1, suma[i].x2, suma[i].x3, suma[mijloc].x1, suma[mijloc].x2, suma[mijloc].x3);
                return 0;
            }
            if (suma[mijloc].s > s1){
                dr = mijloc-1;
            }else{
                st = mijloc+1;
            }
        }
    }
    printf("%d\n", -1);
    return 0;
}