Pagini recente » Cod sursa (job #1582652) | Cod sursa (job #1120400) | Cod sursa (job #1049147) | Cod sursa (job #388372) | Cod sursa (job #1763319)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100
#define MOD 8999899
#define h(x) (x%MOD)
#define cube(y) (y*y*y)
int v[MAXN], lista[MOD], next[cube(MAXN)], ok=1;
int main(){
int n, i, j, k, s, hash, x, poz;
FILE *fin, *fout;
fin=fopen("loto.in", "r");
fout=fopen("loto.out", "w");
fscanf(fin, "%d%d", &n, &s);
memset(lista, -1, sizeof(lista));
for(i=0; i<n; i++)
fscanf(fin, "%d", &v[i]);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
for(k=0; k<n; k++){
x=v[i]+v[j]+v[k]; hash=h(x);///generam hashul
next[n*n*i+n*j+k]=lista[hash];///tinem lista inalntuita
lista[hash]=n*n*i+n*j+k;///vectorul hash, care retine cele 3 coordonate din vect initial
}
for(i=0; i<n && ok; i++)
for(j=0; j<n && ok; j++)
for(k=0; k<n && ok; k++){
x=s-v[i]-v[j]-v[k]; hash=h(x);
poz=lista[hash];
while(poz!=-1 && ok){
if(x==v[poz/(n*n)]+v[poz/n]+v[poz%n]){
fprintf(fout, "%d %d %d %d %d %d\n", v[poz/(n*n)], v[poz/n], v[poz%n], v[i], v[j], v[k]);
ok=0;
}
poz=next[poz];
}
}
if(ok)
fprintf(fout, "-1\n");
fclose(fin);
fclose(fout);
return 0;
}