Pagini recente » Cod sursa (job #981767) | Cod sursa (job #1864659) | Cod sursa (job #1644428) | Cod sursa (job #2227937) | Cod sursa (job #165128)
Cod sursa(job #165128)
#include <stdio.h>
long v[105],n,ns=1;
long a[1000020];
long drum[1000020],drum_aux;
int auxxx[10];
int poz(long li,long ls){
long i=li,j=ls,t;int mod=1;
while (i!=j){
if (a[i]>a[j]){
t=a[i],a[i]=a[j],a[j]=t;
t=drum[i],drum[i]=drum[j],drum[j]=t;
mod=(mod+1)%2;
}
if (mod==0) i++;
else j--;
}
return i;
}
void qsort(long li, long ls){
if (li<ls){
long k=poz(li,ls);
qsort(li,k);
qsort(k+1,ls);
}
}
int gasit(long ax){
long li=1,ls=ns,m;
if (a[ls]==ax) return ls;
else {
while (li!=ls){
m=(li+ls)/2;
if (ax>a[m]) li=m+1;
else if (ax<a[m]) ls=m;
else if (ax==a[m]) return m;
}}
return 0;
}
int main(){
long j,k,q,aux,s;
freopen ("loto.in", "r",stdin);
freopen ("loto.out","w",stdout) ;
scanf("%ld%ld",&n,&s);
long i;
for(i=1;i<=n;i++) scanf("%ld",v+i);
for(i=1;i<=n;i++)for(j=1;j<=n;j++)for(q=1;q<=n;q++)a[ns++]=v[i]+v[j]+v[q],drum[ns-1]=i,drum[ns-1]=drum[ns-1]*100+j,drum[ns-1]=drum[ns-1]*100+q;
ns--;
qsort(1,ns);
int gata=0;
for (i=1;i<=ns && !gata;i++)
if (a[i]!=a[i-1]){
k=gasit(s-a[i]);
if (k)
{gata=1;
drum_aux=drum[i];
for(j=0;j<3;j++){
auxxx[j]=drum[i]%100,drum[i]/=100;
if (!auxxx[j]) auxxx[j]=100;
}
drum[i]=drum_aux;
for(j=0;j<3;j++){
auxxx[j+3]=drum[k]%100,drum[k]/=100;
if (!auxxx[j]) auxxx[j]=100;
}
/*int t;
for(i=0;i<5;i++)
for(j=i+1;j<6;j++)
if (auxxx[i]>auxxx[j]) t=auxxx[i],auxxx[i]=auxxx[j],auxxx[j]=t;
*/
for (i=0;i<5;i++)
printf("%ld ",v[auxxx[i]]);
}
}
if (!gata) printf("-1");
return 0;
}