Pagini recente » Cod sursa (job #2472952) | Cod sursa (job #1971336) | Cod sursa (job #880149) | Cod sursa (job #3152740) | Cod sursa (job #143896)
Cod sursa(job #143896)
#include <stdio.h>
#include <stdlib.h>
#define limita_sp 10000
#define limita_v 109
struct suma_trei
{
int s,x,y,z;
};
suma_trei sp[limita_sp];
int v[limita_v];
int compara(const void* a, const void* b)
{
return (sp[*((int*)a)].s-sp[*((int*)b)].s);
}
int comp_int(const void* a, const void* b)
{
return (*((int*)a))-(*((int*)b));
}
int cauta_binar(int s_cautata, int li, int ls)
{
int j;
while(li<ls)
{
j=(li+ls)/2;
if(sp[j].s==s_cautata) return j;
if(sp[j].s>s_cautata) ls=j-1;
else li=j+1;
}
return 0;
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
int i,j,k;
int n,s;
scanf("%d %d",&n,&s);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
fclose(stdin);
int csp = 0; //contor de sume partiale
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
for(k=1;k<=n;++k)
{
++csp;
sp[csp].x=v[i];
sp[csp].y=v[j];
sp[csp].z=v[k];
sp[csp].s=v[i]+v[j]+v[k];
}
}
}
//am creat vectorul sp de structuri de sume partiale, cu csp componente
qsort(sp+1,csp,sizeof(sp[0]),compara);
int x;
int sol[6];
for(i=1;i<=csp;++i)
{
x=cauta_binar(s-sp[i].s,i+1,csp);
if(x)
{
sol[0]=sp[i].x;
sol[1]=sp[i].y;
sol[2]=sp[i].z;
sol[3]=sp[x].x;
sol[4]=sp[x].y;
sol[5]=sp[x].z;
qsort(sol,6,sizeof(sol[0]),comp_int);
printf("%d %d %d %d %d %d",sol[0],sol[1],sol[2],sol[3],sol[4],sol[5]);
fclose(stdout);
return 0;
}
}
printf("-1");
fclose(stdout);
return 0;
}