Pagini recente » Cod sursa (job #2489927) | Cod sursa (job #2736995) | Cod sursa (job #659783) | Cod sursa (job #2867807) | Cod sursa (job #508265)
Cod sursa(job #508265)
#include <fstream>
#define nmax 101
#define mmax 500000
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int nr, n, S, rez, found, ind, sum;
int v[nmax];
struct lista
{
long st, nd, rd, sum;
} a[mmax];
int cmp(lista x, lista y)
{
return x.sum < y.sum;
}
int main()
{
long i, j, k, maxim=0, step=0;
fin >> n >> S;
for(i=1; i<=n; ++i)
fin >> v[i];
for(i=1; i<=n; ++i)
for(j=i; j<=n; ++j)
for(k=j; k<=n; ++k)
{
++nr;
a[nr].st = v[i];
a[nr].nd = v[j];
a[nr].rd = v[k];
a[nr].sum = v[i] + v[j] + v[k];
}
sort(a+1, a+n+1, cmp);
//first try failed
for(maxim = 1; maxim <=nr; maxim <<=1);
for(i=1; i<=nr; ++i)
{
step = maxim;
sum = S-a[i].sum;
//caut binar
for(j=0; step; step >>= 1)
if(j+step <= nr && a[j+step].sum <= sum)
j+=step;
if(a[j].sum == sum)
{
fout << S << "\n";
fout << a[i].st << " " << a[i].nd << " " << a[i].rd << " " << a[j].st << " " << a[j].nd << " " << a[j].rd << "\n";
return 0;
}
}
fout << "-1\n";
return 0;
}