Pagini recente » Cod sursa (job #2678301) | Cod sursa (job #430701) | Cod sursa (job #549955) | Cod sursa (job #2850709) | Cod sursa (job #1508641)
#include<stdio.h>
#include<algorithm>
#define N 101*101*101
using namespace std;
FILE *fin,*fout;
int n,s,i,j,k,key,it;
struct chestie
{
int a;
int b;
int c;
int sum;
} ch[N],val;
bool comp(chestie a,chestie b)
{
return a.sum<b.sum;
}
int v[101];
bool bs(int x,chestie ches)
{
int pas=1<<17,start=0,end=it;
//printf("%d\n",pas);
//printf("BS de %d:\n",x);
for(pas; pas>0; pas=pas>>1)
{
if(start+pas>=end) continue;
//printf("Se cauta in:%d Valoare:%d\n",start+pas,ch[start+pas].sum);
if(ch[start+pas].sum<x) start+=pas;
else if(ch[start+pas].sum==x)
{
printf("%d %d %d %d %d %d",ch[start+pas].a,ch[start+pas].b,ch[start+pas].c,ches.a,ches.b,ches.c);
return 1;
}
}
return 0;
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d%d",&n,&s);
if(n<=20)
{
for(i=0; i<n; i++)
for(j=i; j<n; j++)
for(k=j; k<n; k++)
for(int l=k; l<n; l++)
for(int o=l; o<n; o++)
for(int q=o; q<n; q++) if(v[i]+v[j]+v[k]+v[l]+v[o]+v[q]==s)
{
printf("%d %d %d %d %d %d",v[i],v[j],v[k],v[l],v[o],v[q]);
return 0;
}
}
for(i=0; i<n; i++) scanf("%d",&v[i]);
for(i=0; i<n; i++)
for(j=i; j<n; j++)
for(k=j; k<n; k++)
{
ch[it].a=v[i];
ch[it].b=v[j];
ch[it].c=v[k];
ch[it].sum=v[i]+v[j]+v[k];
++it;
}
sort(ch,ch+it,comp);
for(i=0; i<it; ++i) if(bs(s-ch[i].sum,ch[i])) return 0;
printf("-1");
return 0;
}