Pagini recente » Cod sursa (job #1533337) | Istoria paginii runda/mf_boss3 | Cod sursa (job #2004219) | Cod sursa (job #2208170) | Cod sursa (job #131520)
Cod sursa(job #131520)
#include<stdio.h>
long long n,i,j,k,nr,c,p,x,li,ls,mij,gas,S;
long long s[101],indici[20001][4],sume[20001];
void intersch(long long c,long long p)
{
long long aux;
aux=sume[c];
sume[c]=sume[p];
sume[p]=aux;
aux=indici[c][1];
indici[c][1]=indici[p][1];
indici[p][1]=aux;
aux=indici[c][2];
indici[c][2]=indici[p][2];
indici[p][2]=aux;
aux=indici[c][3];
indici[c][3]=indici[p][3];
indici[p][3]=aux;
}
int main(void)
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%lld%lld",&n,&S);
for(i=1;i<=n;i++)
scanf("%lld",&s[i]);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
{
nr++;
sume[nr]=s[i]+s[j]+s[k];
indici[nr][1]=i;
indici[nr][2]=j;
indici[nr][3]=k;
c=nr;
p=nr/2;
while(p>0)
{
if(sume[c]<sume[p])
{
intersch(c,p);
c=p;
p=p/2;
}
else
p=0;
}
}
i=i;
for(i=nr;i>1;i--)
{
intersch(1,i);
p=1;
c=2;
while(c<i)
{
if(sume[c]>sume[c+1]&&c+1<i)
c++;
if(sume[p]>sume[c])
{
intersch(c,p);
p=c;
c*=2;
}
else
c=i;
}
}
i=i;
gas=0;
for(k=1;k<=nr;k++)
{
x=S-sume[k];
li=1;
ls=nr;
while(li<ls)
{
mij=(li+ls)/2;
if(sume[mij]==x)
{
printf("%lld %lld %lld %lld %lld %lld",s[indici[k][1]],s[indici[k][2]],s[indici[k][3]],s[indici[mij][1]],s[indici[mij][2]],s[indici[mij][3]]);
gas=1;
k=nr+1;
break;
}
else
if(x<sume[mij])
li=mij;
else
ls=mij;
}
}
if(!gas)
printf("-1");
printf("\n");
return 0;
}