Pagini recente » Cod sursa (job #2269832) | Cod sursa (job #1868638) | Cod sursa (job #1734560) | Cod sursa (job #2391187) | Cod sursa (job #2674223)
#include <bits/stdc++.h>
#define NMAX 3000000
using namespace std;
/**************************************************/
/// INPUT / OUTPUT
ifstream f("loto.in");
ofstream g("loto.out");
/**************************************************/
/// GLOBAL DELCARATIONS
int n, target, foundSum = -1;
int sum, diff;
int arr[105];
bool freq[NMAX];
vector < int > ans;
/**************************************************/
///-----------------------------------------------------------------
inline void ReadInput()
{
f >> n >> target;
for(int i = 1 ; i <= n ; ++ i) f >> arr[i];
}
///-----------------------------------------------------------------
inline void Solution()
{
/// get every sum possible
for(int i = 1 ; i <= n ; ++ i)
{
for(int j = i ; j <= n ; ++ j)
{
for(int k = j ; k <= n ; ++ k)
{
sum = arr[i] + arr[j] + arr[k];
diff = target - sum;
if(freq[diff])
{
foundSum = diff;
ans.push_back(arr[i]);
ans.push_back(arr[j]);
ans.push_back(arr[k]);
break;
}
else
{
if(!freq[sum]) freq[sum] = 1;
}
}
if(foundSum != -1) break;
}
if(foundSum != -1) break;
}
if(foundSum == -1) return;
/// find the sum that 'completes' the other half
for(int i = 1 ; i <= n ; ++ i)
{
for(int j = i ; j <= n ; ++ j)
{
for(int k = j ; k <= n ; ++ k)
{
sum = arr[i] + arr[j] + arr[k];
if(sum == foundSum)
{
ans.push_back(arr[i]);
ans.push_back(arr[j]);
ans.push_back(arr[k]);
return;
}
}
}
}
}
///-----------------------------------------------------------------
inline void Output()
{
if(foundSum == -1) g << "-1";
for(int i = 0 ; i < ans.size(); ++ i) g << ans[i] << " ";
}
///-----------------------------------------------------------------
int main()
{
ReadInput();
Solution();
Output();
return 0;
}