Pagini recente » Cod sursa (job #3348672) | Cod sursa (job #3348665) | Cod sursa (job #3318347) | Cod sursa (job #3307141) | Cod sursa (job #3347609)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100
#define MOD 666019
#define NIL -1
typedef struct
{
int val, urm;
} element;
int poz_lst[MOD], nr, x[N], n, s;
element v[N*N*N];
bool exista(int x, int cat)
{
for (int p = poz_lst[cat]; p != NIL; p = v[p].urm)
{
if (v[p].val == x)
{
return true;
}
}
return false;
}
void adauga(int x)
{
int categorie = x % MOD;
if (exista(x, categorie))
{
return;
}
v[nr].val = x;
v[nr].urm = poz_lst[categorie];
poz_lst[categorie] = nr++;
}
void sterge(int x)
{
int categorie = x % MOD;
int p = poz_lst[categorie];
while (p != NIL && v[p].val != x)
{
p = v[p].urm;
}
if (p == NIL)
{
return;
}
int poz_ultim = poz_lst[categorie];
v[p].val = v[poz_ultim].val;
poz_lst[categorie] = v[poz_ultim].urm;
}
void afis(FILE *out, int val)
{
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = j; k < n; k++)
{
if (x[i] + x[j] + x[k] == val)
{
fprintf(out, "%d %d %d\n", x[i], x[j], x[k]);
return;
}
}
}
}
}
int main()
{
for (int i = 0; i < MOD; i++)
{
poz_lst[i] = NIL;
}
FILE *in, *out;
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]);
}
fclose(in);
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = j; k < n; k++)
{
adauga(x[i] + x[j] + x[k]);
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = j; k < n; k++)
{
int val = s - (x[i] + x[j] + x[k]);
if (exista(val, val % MOD))
{
fprintf(out, "%d %d %d ", x[i], x[j], x[k]);
afis(out, val);
fclose(out);
return 0;
}
}
}
}
fprintf(out, "-1\n");
fclose(out);
return 0;
}