Pagini recente » Cod sursa (job #1825512) | Cod sursa (job #2722076) | Cod sursa (job #163070) | Cod sursa (job #694028) | Cod sursa (job #1190008)
#include<fstream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct nod
{
int val;
int x,y,z;
};
int n,S,a[105],tm[10];
nod sol[1000005];
inline void ADD(int p,int w,int l)
{
nod k;
k.val=p+w+l;
k.x=p;
k.y=w;
k.z=l;
sol[++sol[0].val]=k;
}
inline bool cmp(const nod A,const nod B)
{
return A.val<B.val;
}
int main()
{
int i,j,l,st,dr,mij;
bool test;
fin>>n>>S;
for (i=1;i<=n;i++)fin>>a[i];
sort(a+1,a+n+1);
for (i=1;i<=n;i++)
{
ADD(a[i],a[i],a[i]);
for (j=i+1;j<=n;j++)
{
ADD(a[i],a[i],a[j]);
ADD(a[i],a[j],a[j]);
for (l=j+1;l<=n;l++)
{
ADD(a[i],a[j],a[l]);
ADD(a[i],a[i],a[l]);
ADD(a[i],a[l],a[l]);
}
}
}
sort(sol+1,sol+sol[0].val+1,cmp);test=0;
for (i=1;i<=sol[0].val && !test;i++)
{
st=1;dr=sol[0].val;test=0;
while (st<=dr)
{
mij=(st+dr)>>1;
if (sol[mij].val+sol[i].val==S)
{
tm[1]=sol[mij].x;
tm[2]=sol[mij].y;
tm[3]=sol[mij].z;
tm[4]=sol[i].x;
tm[5]=sol[i].y;
tm[6]=sol[i].z;
sort(tm+1,tm+7);
for (l=1;l<=6;l++) fout<<tm[l]<<" ";
fout<<"\n";
st=dr+1;test=1;
}
else if (sol[mij].val>S-sol[i].val) dr=mij-1;
else st=mij+1;
}
}
return 0;
}