Pagini recente » Cod sursa (job #2893753) | Istoria paginii utilizator/pumpkinzu | Istoria paginii runda/simv_1 | Cod sursa (job #1345879) | Cod sursa (job #2020155)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct SABATON{
int S,a,b,c;
SABATON(int s,int x,int y,int z)
{
S = s;
a = x;
b = y;
c = z;
}
};
bool cmp(SABATON x,SABATON y)
{
return x.S < y.S;
}
vector<SABATON>c;
vector<int>v;
vector<int>sol;
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
int n , s , x ;
vector<int>::iterator it1,it2,it3;
vector<SABATON>::iterator i1,i2;
scanf("%d%d",&n,&s);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d",&x);
v.push_back(x);
}
for(it1 = v.begin(); it1 != v.end() ; it1++){
for(it2 = it1; it2 != v.end() ; it2++){
for(it3 = it2; it3 != v.end() ; it3++){
SABATON temp((*it1)+(*it2)+(*it3),(*it1),(*it2),(*it3));
c.push_back(temp);
}
}
}
sort(c.begin(),c.end(),cmp);
bool ok1 = false;
for(i1 = c.begin() ; i1 != c.end(); i1++)
{
int dif = s - (i1)->S;
if(dif <= 0)
continue;
SABATON ddd(dif,0,0,0);
bool ok = binary_search(c.begin(),c.end(),ddd,cmp);
if(ok == true)
{
ok1 = true;
i2 = upper_bound(c.begin(),c.end(),ddd,cmp);
i2--;
sol.push_back(i1->a);
sol.push_back(i1->b);
sol.push_back(i1->c);
sol.push_back(i2->a);
sol.push_back(i2->b);
sol.push_back(i2->c);
break;
}
}
if(ok1 == false)
printf("-1");
else
for(it1 = sol.begin() ; it1 != sol.end() ; it1++)
printf("%d ",(*it1));
return 0;
}