Pagini recente » Cod sursa (job #628317) | Cod sursa (job #268357) | Cod sursa (job #1793765) | Cod sursa (job #3219130) | Cod sursa (job #2196208)
#include<fstream>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
int n,suma,num[101],top,scrt;
struct data{int s,a,b,c;} v[1000001];
void heapify(int n,int i)
{
int imax=i,st=2*i,dr=2*i+1;
data aux;
if(st<=n && v[st].s>v[imax].s) imax=st;
if(dr<=n && v[dr].s>v[imax].s) imax=dr;
if(imax!=i)
{
aux=v[i]; v[i]=v[imax]; v[imax]=aux;
heapify(n,imax);
}
}
void HeapSort()
{
for(int i=top/2;i>=1;i--)
heapify(top,i);
data aux;
for(int i=top;i>=1;i--)
{
aux=v[1]; v[1]=v[i]; v[i]=aux;
heapify(i-1,1);
}
}
int cautbin(int x)
{
int st=1,dr=top,mid;
while(st<=dr)
{
mid=(st+dr)/2;
if(x<v[mid].s) dr=mid-1;
else if(x>v[mid].s) st=mid+1;
else return mid;
}
return 0;
}
int main()
{
cin>>n>>suma;
for(int i=1;i<=n;i++)
cin>>num[i];
cin.close();
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
{
v[++top].s=num[i]+num[j]+num[k];
v[top].a=num[i];
v[top].b=num[j];
v[top].c=num[k];
}
HeapSort();
int p=0;
for(int i=1;i<=top;i++)
{
p=cautbin(suma-v[i].s);
if(p>0)
{
cout<<v[i].a<<' '<<v[i].b<<' '<<v[i].c<<' '<<v[p].a<<' '<<v[p].b<<' '<<v[p].c;
i=top+1;
}
}
if(p==0) cout<<-1;
cout.close();
}