Pagini recente » Cod sursa (job #2410735) | Cod sursa (job #2280380) | Cod sursa (job #2042747) | Cod sursa (job #2349484) | Cod sursa (job #777085)
Cod sursa(job #777085)
#include <fstream>
#include <bitset>
#include <vector>
#include <algorithm>
#include <cassert>
#define N 110
#define SM 400000010
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n,i,j,k,A[N],S,s;
bitset<SM> M;
vector<int> ANS;
void Solve1 ()
{
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
for (k=j; k<=n; k++)
if (A[i]+A[j]+A[k]<=S)
{
if (M[S-A[i]-A[j]-A[k]])
{
S-=A[i]+A[j]+A[k];
ANS.push_back(A[i]);
ANS.push_back(A[j]);
ANS.push_back(A[k]);
return;
}
}
}
void Solve2 ()
{
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
for (k=j; k<=n; k++)
if (A[i]+A[j]+A[k]==S)
{
ANS.push_back(A[i]);
ANS.push_back(A[j]);
ANS.push_back(A[k]);
return;
}
}
int main ()
{
f >> n >> S;
for (i=1; i<=n; i++)
{
f >> A[i];
assert(0<=A[i] && A[i]<=100000000);
}
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
for (k=j; k<=n; k++)
if (A[i]+A[j]+A[k]<SM)
M[A[i]+A[j]+A[k]]=1;
s=S;
Solve1();
if (s==S)
{
g << -1 << '\n';
f.close();
g.close();
return 0;
}
Solve2();
sort(ANS.begin(),ANS.end());
for (i=0; i<ANS.size(); i++)
g << ANS[i] << ' ';
g << '\n';
f.close();
g.close();
return 0;
}