Pagini recente » Cod sursa (job #835261) | Cod sursa (job #1074733) | Cod sursa (job #2475731) | Cod sursa (job #2940914) | Cod sursa (job #1189159)
#include <cstdio>
#include <algorithm>
#include <cstdlib>
FILE* in;
FILE* out;
const int Q=101,W=171750;
int v[Q];
int n,s;
struct chestie{
int val;
int nr[4];
} a[W];
int srt[W];
int nxt;
void inline find(int p)
{
int x=s-a[srt[p]].val;
int i=1<<19;
int t=0;
while(i)
{
if(i+t<=nxt)
{
if(a[srt[t+i]].val<x)
t+=i;
else if (a[srt[t+i]].val==x)
{
t+=i;
break;
}
}
i/=2;
}
if(a[srt[t]].val==x)
{
fprintf(out,"%d %d %d %d %d %d",a[srt[p]].nr[1],a[srt[p]].nr[2],a[srt[p]].nr[3],a[srt[t]].nr[1],a[srt[t]].nr[2],a[srt[t]].nr[3] );
exit(0);
}
}
void gaseste_rez()
{
int act=1,s2=s/2;
while( a[srt[act]].val < s2 )
act++;
for(;act<=nxt; act++)
{
if(a[srt[act]].val == a[srt[act-1]].val )
continue;
find(act);
}
fprintf(out,"-1");
}
int act[4],sum;
void make_sumde3(int pas)
{
for(int i=1; i<=n; i++)
for(int j=i; j<=n; j++)
for(int k=j; k<=n; k++)
{
a[++nxt].val=v[i]+v[j]+v[k];
a[nxt].nr[1]=v[i];
a[nxt].nr[2]=v[j];
a[nxt].nr[3]=v[k];
srt[nxt]=nxt;
}
}
bool cmp (int x, int y)
{
return a[x].val<a[y].val;
}
int main()
{
in=fopen("loto.in","r");
out=fopen("loto.out","w");
fscanf(in,"%d%d",&n,&s);
for(int i=1; i<=n; i++)
{
fscanf(in,"%d",&v[i]);
// fprintf(out,"%d ",i);
}
make_sumde3(1);
std::sort(srt+1,srt+nxt+1,cmp);
while(a[srt[nxt]].val>s)
nxt--;
// for(int i=1; i<=nxt; i++)
// fprintf(out,"%d\n",a[srt[i] ].val);
gaseste_rez();
return 0;
}