Pagini recente » Cod sursa (job #3290858) | Cod sursa (job #2401761) | Cod sursa (job #3196541) | Cod sursa (job #359740) | Cod sursa (job #1973218)
#include <fstream>
#include <iostream>
#include <vector>
#define MOD 666013
#define MAXN 105
using namespace std;
ifstream f ("loto.in");
ofstream g ("loto.out");
unsigned int n, s, v[MAXN];
unsigned int sum[1000001];
vector < int > h[MOD];
void Add(unsigned int x){
int p = 0;
for(int i = 0; i < h[x % MOD].size(); ++i){
if(h[x % MOD][i] == x){
p = 1;
break;
}
}
if(!p) h[x % MOD].push_back(x);
}
int Find(unsigned int x){
for(int i = 0; i < h[x % MOD].size(); ++i){
if(h[x % MOD][i] == x) return 1;
}
return 0;
}
int main(){
f >> n >> s;
for(int i = 1; i <= n; ++i) f >> v[i];
int l = 0;
for(int k = 1; k <= n; ++k){
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
sum[++l] = v[k] + v[i] + v[j];
Add(sum[l]);
}
}
}
int p = 0, ok = 0;;
int s1 = 0, s2 = 0;
for(int i = 1; i <= l; ++i){
if(Find(s - sum[i])){
p = 1;
for(int q = 1; q <= n; ++q){
if(ok) break;
for(int r = 1; r <= n; ++r){
if(ok) break;
for(int t = 1; t <= n; ++t){
unsigned int S = v[q] + v[r] + v[t];
if(S == sum[i] && !s1){
s1 = 1;
g << v[q] << ' ' << v[r] << ' ' << v[t] << ' ';
}
else if(S == s - sum[i] && !s2){
s2 = 1;
g << v[q] << ' ' << v[r] << ' ' << v[t] << ' ';
}
if(s1 && s2){
ok = 1;
break;
}
}
}
}
}
}
if(!p) g << -1 << '\n';
}