Cod sursa(job #3297055)

Utilizator rapidu36Victor Manz rapidu36 Data 20 mai 2025 18:12:21
Problema Loto Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.26 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100
#define K 666019
#define NIL -1

FILE *in, *out;
int n, s, x[N];

typedef struct
{
    int val, urm;
} element;

int lst[K], n_v;
element v[N*N*N];

void init_h()
{
    n_v = 0;
    for (int i = 0; i < K; i++)
    {
        lst[i] = NIL;
    }
}

int pozitie(int x, int categorie)
{
    for (int p = lst[categorie]; p != NIL; p = v[p].urm)
    {
        if (v[p].val == x)
        {
            return p;
        }
    }
    return NIL;
}

bool apartine(int x)
{
    int categorie = x % K;
    return (pozitie(x, categorie) != NIL);
}

void adauga(int x)
{
    int categorie = x % K;
    if (pozitie(x, categorie) != NIL)
    {
        return;
    }
    v[n_v].val = x;
    v[n_v].urm = lst[categorie];
    lst[categorie] = n_v;
    n_v++;
}

void triplet(int sum)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                if (x[i] + x[j] + x[k] == sum)
                {
                    fprintf(out, "%d %d %d\n", x[i], x[j], x[k]);
                    return;
                }
            }
        }
    }
}

int main()
{
    init_h();
    in = fopen("loto.in", "r");
    out = fopen("loto.out", "w");
    fscanf(in, "%d%d", &n, &s);
    for (int i = 0; i < n; i++)
    {
        fscanf(in, "%d", &x[i]);
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                int sum = x[i] + x[j] + x[k];
                adauga(sum);
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                int sum = x[i] + x[j] + x[k];
                if (apartine(s - sum))
                {
                    fprintf(out, "%d %d %d ", x[i], x[j], x[k]);
                    triplet(s - sum);
                    fclose(in);
                    fclose(out);
                    return 0;
                }
            }
        }
    }
    fprintf(out, "-1\n");
    fclose(in);
    fclose(out);
    return 0;
}