Pagini recente » Cod sursa (job #2669979) | Cod sursa (job #884730) | Cod sursa (job #1545506) | Cod sursa (job #2377293) | Cod sursa (job #1022136)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("loto.in");
ofstream fo("loto.out");
struct valori {
int a,b,c,suma;};
int v[101],s,x,y,nr;
short n;
valori w[1000002];
int cautbin(int i,int j,int x) {
int m=(i+j)/2;
if ((m==i)&&(w[m].suma!=x)&&(w[m+1].suma!=x))
return -1;
else
if (w[m].suma==x)
return m;
else
if (w[m+1].suma==x)
return m+1;
else
if (x<w[m].suma)
cautbin(i,m,x);
else
cautbin(m,j,x);
}
int main()
{
fi>>n>>s;
for (int i=1;i<=n;i++) {
fi>>v[i];
if (v[i]*6==s)
x=v[i];
if (v[i]>y)
y=v[i];
}
if (x!=0)
for (int i=1;i<=6;i++)
fo<<x<<' ';
else
if (y*6<s)
fo<<'-1';
else {
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++)
for (int k=j;k<=n;k++)
if (v[i]+v[j]+v[k]<s) {
nr++;
w[nr].a=v[i];
w[nr].b=v[j];
w[nr].c=v[k];
w[nr].suma=v[i]+v[j]+v[k];
}
x=0;y=0;
for (int i=n;i>=1;i--)
if (w[i].suma+w[cautbin(1,nr,s-w[i].suma)].suma==s) {
x=i;
y=cautbin(1,nr,s-w[i].suma);
}
if (x==0)
fo<<'-1';
else
fo<<w[x].a<<' '<<w[x].b<<' '<<w[x].c<<' '<<w[y].a<<' '<<w[y].b<<' '<<w[y].c;
}
return 0;
}