Pagini recente » Cod sursa (job #32575) | Cod sursa (job #1328871) | Cod sursa (job #807400) | Cod sursa (job #627751) | Cod sursa (job #1449526)
#include <vector>
#include <tuple>
#include <fstream>
#include <algorithm>
using namespace std;
using ll = long long;
constexpr ll suma(const tuple<ll, ll, ll>& x){
return get<0>(x) + get<1>(x) + get<2>(x); }
constexpr bool operator<(const tuple<ll, ll, ll>& lhs, const tuple<ll, ll, ll>& rhs){
return suma(lhs) < suma(rhs); }
int main(){
ifstream f("loto.in");
ofstream g("loto.out");
int n, s;
f >> n >> s;
vector<tuple<ll, ll, ll> > v;
v.reserve(n*n*n);
{
vector<ll> nr(n, 0ll);
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.emplace_back(*a, *b, *c); } } } }
sort(begin(v), end(v));
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){
array<ll, 6> paranoie({get<0>(*stanga),
get<1>(*stanga), get<2>(*stanga),
get<0>(*dreapta), get<1>(*dreapta),
get<2>(*dreapta)});
sort(begin(paranoie), end(paranoie));
for(const auto x : paranoie){
g << x << ' '; }
return 0; }
else{
--dreapta; } }
//implicit n-am iesit cu returnul de mai sus
g << "-1";
return 0; }