Pagini recente » Cod sursa (job #2178361) | Istoria paginii runda/aaaa | Cod sursa (job #2071023) | Cod sursa (job #1964672) | Cod sursa (job #1412189)
#include <iostream>
#include <fstream>
#include <algorithm>
#define nmax 100
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct sume
{
long sum;
int x,y,z;
} sum[nmax*nmax*nmax];
long long v[nmax];
long long n,s,nr,jj;
void read() /// OK
{
f>>n>>s;
for(int i=1;i<=n;i++)f>>v[i];
}
bool comp(sume a, sume b) /// OK
{
if(a.sum < b.sum)return true;
return false;
}
long bs(int _s)
{
int st=1,dr=nr,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(sum[mij].sum == _s)
{
jj=mij;
return sum[mij].sum;
}
else if(sum[mij].sum < _s){st = mij+1;}
else {dr = mij-1;}
}
return 0;
}
void solve()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(v[i]+v[j]+v[k] < s)
{
if((v[i]+v[j]+v[k])*2 == s)
{
g<<v[i]<<" "<<v[i]<<" "
<<v[j]<<" "<<v[j]<<" "
<<v[k]<<" "<<v[k]<<" "
}
sum[++nr].sum=v[i]+v[j]+v[k];
sum[nr].x=i;
sum[nr].y=j;
sum[nr].z=k;
}
sort(sum+1,sum+nr+1,comp);
//for(int i=1;i<=nr;i++)cout<<sum[i].sum<<" ";
for(int i=1;i<=nr;i++)
{
if(sum[i].sum == s)
{
return;
}
else if( sum[i].sum + bs(s-sum[i].sum) == s)
{
g<<v[sum[i].x]<<" "<<v[sum[i].y]<<" "<<v[sum[i].z]<<" "
<<v[sum[jj].x]<<" "<<v[sum[jj].y]<<" "<<v[sum[jj].z];
return;
}
}
}
int main()
{
read();
solve();
if(jj)return 0;
g<<-1;
return 0;
}