Pagini recente » Monitorul de evaluare | Cod sursa (job #1729883) | Cod sursa (job #109112) | Cod sursa (job #2056245) | Cod sursa (job #179425)
Cod sursa(job #179425)
#include<stdio.h>
long s,v[101];
int n;
struct suma {
long s,x,y,z;
} S[200000],aux;
int pozitie (int s, int d)
{
while (s<d)
{
while (s<d && S[s].s<=S[d].s)
s++;
aux=S[s];
S[s]=S[d];
S[d]=aux;
while (s<d&&S[d].s>=S[s].s)
d--;
aux=S[s];
S[s]=S[d];
S[d]=aux;
}
//S[s]=aux;
return s;
}
void quick (int s, int d)
{
int p;
if (s>d)
{
p=pozitie(s,d);
quick(s,p-1);
quick(p+1,d);
}
}
int main ()
{
int i,j,k,poz=0,mij,val,a,b,c;
FILE *f=fopen("loto.in","r");
fscanf(f,"%d%ld",&n,&s);
for (i=1;i<=n;++i)
fscanf(f,"%d",&v[i]);
fclose(f);
for (i=1;i<=n;++i)
for (j=i;j<=n;++j)
for (k=j;k<=n;++k)
{
S[++poz].s=v[i]+v[j]+v[k];
S[poz].x=v[i];
S[poz].y=v[j];
S[poz].z=v[k];
}
quick (1,poz);
for (i=1;i<=poz;++i)
{
val=s-S[i].s;
a=i;
b=poz;
while (a<=b)
{
c=(a+b)/2;
if (S[c].s==val)
{
FILE *f=fopen("loto.out","w");
fprintf(f,"%ld %ld %ld %ld %ld %ld",S[i].y,S[i].z,S[i].x,S[c].x,S[c].y,S[c].z);
fclose(f);
return 0;
}
else
if (S[c].s>val)
b=c-1;
else
a=c+1;
}
}
f=fopen("loto.out","w");
fprintf(f,"-1");
fclose(f);
return 0;
}