Pagini recente » Cod sursa (job #792164) | Cod sursa (job #3146432) | Cod sursa (job #999905) | Cod sursa (job #2627087) | Cod sursa (job #391934)
Cod sursa(job #391934)
#include <fstream>
using namespace std;
#include <cstdlib>
long v[101],s;
int sol[7],k,n;
ifstream f("loto.in");
ofstream o("loto.out");
int comp(const void *a,const void *b) {return *(long*)a-*(long*)b;}
inline int succ() {if (sol[k]<n) {sol[k]++;return 1;} return 0;}
inline int valid(){if (sol[k]>=sol[k-1]) return 1; return 0;}
inline int sum(){long sm=v[sol[1]]+v[sol[2]]+v[sol[3]]+v[sol[4]]+v[sol[5]]+v[sol[6]];if (sm==s) return 1;return 0;}
int scr()
{
long sm=v[sol[1]]+v[sol[2]]+v[sol[3]]+v[sol[4]]+v[sol[5]]+v[sol[6]];
if (sm!=s) return 0;
for (int i=1;i<=6;i++)
o<<v[sol[i]]<<" ";
return 1;
}
int back()
{
int as;
k=1;sol[k]=0;
while (k)
{
do{} while((as=succ())&&(!valid()));
if (as) if (k==6) {if (scr()) return 1;}
else {k++;sol[k]=0;}
else k--;
}
return 0;
}
void loto()
{
int i,k=0;
f>>n>>s;
for(i=1;i<=n;i++)
f>>v[i];
qsort(v+1,n,sizeof(long),comp);
if (6*v[n]<s) {o<<"-1";return;}
for (i=n;i>=1;i--)
{
if (6*v[i]==s) {o<<v[i]<<" "<<v[i]<<" "<<v[i]<<" "<<v[i]<<" "<<v[i]<<" "<<v[i];return;}
if (6*v[i]<s) {k=i;break;}
}
if (k==0 && 6*v[1]>s) {o<<"-1";return;}
if (!back()) o<<"-1";
}
int main()
{
loto();
return 0;
}