Pagini recente » Cod sursa (job #2530871) | Cod sursa (job #2837038) | Cod sursa (job #1070666) | Cod sursa (job #1726316) | Cod sursa (job #1703826)
#include <cstdio>
#include <vector>
#define INF 2000000000
#define MAXN 100
#define MOD 1299721
using namespace std;
struct suma{
int a, b, c, s;
} sume[MAXN*MAXN*MAXN], ans1, ans2;
vector <suma> lst[MOD];
inline suma myfind(int val){
int p=val%MOD;
for(vector <suma>::iterator it=lst[p].begin(); it!=lst[p].end(); it++)
if(it->s==val)
return *it;
return {INF, INF, INF, INF};
}
inline void myadd(suma val){
suma x=myfind(val.s);
if(x.s==INF)
lst[val.s%MOD].push_back(val);
}
int v[MAXN];
int main()
{
FILE *fin, *fout;
int n, i, j, k, m, sum, sol;
fin=fopen("loto.in", "r");
fscanf(fin, "%d%d", &n, &sum);
for(i=0; i<n; i++)
fscanf(fin, "%d", &v[i]);
fclose(fin);
m=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
for(k=0; k<n; k++)
sume[m++]={v[i], v[j], v[k], v[i]+v[j]+v[k]};
for(i=sol=0; i<m && sol==0; i++)
if(sum>=sume[i].s){
ans2=myfind(sum-sume[i].s);
if(ans2.s!=INF){
ans1=sume[i];
sol=1;
}
myadd(sume[i]);
}
fout=fopen("loto.out", "w");
if(sol)
fprintf(fout, "%d %d %d %d %d %d\n", ans1.a, ans1.b, ans1.c, ans2.a, ans2.b, ans2.c);
else
fprintf(fout, "-1\n");
fclose(fout);
return 0;
}