Pagini recente » Cod sursa (job #1100375) | Cod sursa (job #1449516) | Cod sursa (job #332555) | Cod sursa (job #1073690) | Cod sursa (job #1449538)
#include <vector>
#include <iostream>
#include <array>
#include <fstream>
#include <algorithm>
#include <numeric>
using namespace std;
using ll = long long;
ll suma(const array<ll, 3>& x){
return accumulate(begin(x), end(x), 0); }
int main(){
ifstream f("loto.in");
ofstream g("loto.out");
int n, s;
f >> n >> s;
vector<array<ll, 3> > v;
v.reserve(n*n*n);
{
vector<ll> nr(n);
cout << n << '\n';
for(auto& x : nr){
f >> x; }
for(auto a = begin(nr), en = end(nr); a != en; ++a){
for(auto b = a; b != en; ++b){
for(auto c = b; c != en; ++c){
v.push_back(array<ll, 3>({*a, *b, *c})); } } } }
sort(begin(v), end(v), [](const array<ll, 3>& lhs, const array<ll, 3>& rhs){
return suma(lhs) < suma(rhs); });
auto stanga = begin(v), dreapta = end(v)-1;
ll tmp;
while(stanga <= dreapta){
tmp = suma(*stanga) + suma(*dreapta);
if(tmp < s){
++stanga; }
else if(tmp == s){
for(const auto x : *stanga){
g << x << ' '; }
for(const auto x : *dreapta){
g << x << ' '; }
return 0; }
else{
--dreapta; } }
//implicit n-am iesit cu returnul de mai sus
g << "-1\n";
return 0; }