Pagini recente » Statisticile problemei Media | Diferente pentru runda/oni2014_z1_ix intre reviziile 4 si 5 | Diferente pentru runda/oni2014_z1_ix intre reviziile 7 si 2 | Diferente pentru runda/oni2014_z1_ix intre reviziile 7 si 1 | Cod sursa (job #996835)
Cod sursa(job #996835)
#include<stdio.h>
#include<stdlib.h>
#define ELFMAX 101*101*101
long v[101];
struct ELF
{
long sum,x,y,z;
};
ELF elfus[ELFMAX];
int comp(const void *a,const void *b)
{
ELF *pa,*pb;
pa=(ELF*)a;
pb=(ELF*)b;
if(pa->sum > pb->sum)
return 1;
if(pa->sum < pb->sum)
return -1;
return 0;
}
int gasit(long val,int dr)
{
if(val<0)
return 0;
int st=1,med;
while(st<=dr)
{
med=(st+dr)>>1;
if(val==elfus[med].sum)
return med;
if(val<elfus[med].sum)
dr=med-1;
else
st=med+1;
}
return 0;
}
void afiseazabree(int i,int j)
{
printf("%ld %ld% ld% ld %ld %ld",elfus[i].x,elfus[i].y,elfus[i].z,elfus[j].x,elfus[j].y,elfus[j].z);
}
int main()
{
int n,i,j,k;
long s,u=0,val;
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d%ld",&n,&s);
for(i=1;i<=n;i++)
scanf("%ld",&v[i]);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
{elfus[++u].sum=v[i]+v[j]+v[k]; elfus[u].x=v[i]; elfus[u].y=v[j]; elfus[u].z=v[k]; }
qsort(elfus+1,u,sizeof(elfus[0]),comp);
for(i=1;i<=u;i++)
{
val=gasit(s-elfus[i].sum,u);
if(val)
{afiseazabree(i,val); return 0;}
}
printf("-1");
return 0;
}