Pagini recente » Borderou de evaluare (job #1062461) | Monitorul de evaluare | Diferente pentru problema/chomp intre reviziile 4 si 3 | Monitorul de evaluare | Cod sursa (job #2328331)
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
#define nmax 100
vector < pair <int,int > > s;
int v[nmax*nmax*nmax/2][3];
int nr[nmax];
int n,sum;
int sol[10];
void read()
{
int i;
cin>>n>>sum;
for(i=1; i<=n; i++)
cin>>nr[i];
}
void make_partitions()
{
int i,j,part=0,h,b;
for(i=1; i<=n; i++)
for(j=i; j<=n; j++)
for(h=j; h<=n; h++)
{
part++;
v[part][1]=nr[i];
v[part][2]=nr[j];
v[part][3]=nr[h];
b=v[part][1]+v[part][2]+v[part][3];
s.push_back({b,part});
}
}
int solve()
{
int i,st,dr,mid,x,poz1,poz2,j;
sort(s.begin(),s.end());
for(i=0; i<s.size(); i++)
{
x=sum-s[i].first;
st=0;
dr=s.size()-1;
while(st<=dr)
{
mid=(st+dr)/2;
if(s[mid].first==x)
{
poz1=s[mid].second;
poz2=s[i].second;
sol[1]=v[poz1][1];
sol[2]=v[poz1][2];
sol[3]=v[poz1][3];
sol[4]=v[poz2][1];
sol[5]=v[poz2][2];
sol[6]=v[poz2][3];
//sort(sol+1,sol+7);
for(j=1; j<=6; j++)
cout<<sol[j]<<" ";
return 0;
}
else if(s[mid].first<x)
st=mid+1;
else
st=mid-1;
}
}
cout<<-1;
return 0;
}
int main()
{
read();
make_partitions();
solve();
return 0;
}