Pagini recente » Cod sursa (job #352033) | Cod sursa (job #1779774) | Cod sursa (job #2962248) | Cod sursa (job #1923884) | Cod sursa (job #1417382)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
const int SMAX = 666013;
const int NMax = 105;
struct node{
int sum,x,y,z;
};
vector < node > a[SMAX];
int v[NMax];
int cauta(int val){
if(val > 0){
int pos = val % SMAX;
for(int i = 0; i < a[pos].size(); i++){
if(a[pos][i].sum == val){
fout << a[pos][i].x << " " << a[pos][i].y << " " << a[pos][i].z << " ";
return val;
}
}
}
return (1 << 30);
}
int main()
{
int n,s;
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++){
if(v[i] + v[j] + v[k] < s){
int ad = v[i] + v[j] + v[k];
int rd = ad % SMAX;
node ans;
ans.sum = ad;
ans.x = i;
ans.y = j;
ans.z = k;
a[rd].push_back(ans);
}
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
for(int k = 1; k <= n; k++){
int val = s - v[i] - v[j] - v[k];
if(cauta(val) == val){
fout << v[i] << " " << v[j] << " " << v[k];
return 0;
}
}
}
}
fout << -1;
return 0;
}