Pagini recente » Cod sursa (job #579134) | Cod sursa (job #2119254) | Cod sursa (job #1846304) | Cod sursa (job #3246859) | Cod sursa (job #2588882)
#include <bits/stdc++.h>
using namespace std;
#define N 105
#define K 10000009
int n, S, v[N], val[N*N*N], urm[N*N*N], nr;
int lst[K+5];
void add(int x) {
val[++nr] = x;
urm[nr] = lst[x % K];
lst[x % K] = nr;
}
bool exist(int x) {
for(int p = lst[x%K]; p; p = urm[p])
if(x == val[p]) return true;
return false;
}
int main() {
ifstream fin("loto.in");
ofstream fout("loto.out");
fin >> n >> S;
for(int i = 1; i <= n; ++i)
fin >> v[i];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
add(v[i]+v[j]+v[k]);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
if(S - (v[i]+v[j]+v[k]) >= 0 && exist(S - (v[i]+v[j]+v[k]))) {
S -= (v[i]+v[j]+v[k]);
fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ';
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
if(v[i]+v[j]+v[k] == S) {
fout << v[i] << ' ' << v[j] << ' ' << v[k];
return 0;
}
}
fout << "-1";
return 0;
}