Pagini recente » Cod sursa (job #2494300) | Cod sursa (job #288826) | Cod sursa (job #290235) | Cod sursa (job #2739038) | Cod sursa (job #3297055)
#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;
}