Pagini recente » Cod sursa (job #1392723) | Cod sursa (job #2422367) | Cod sursa (job #1203199) | Cod sursa (job #219905) | Cod sursa (job #1121823)
#include <stdio.h>
#include <algorithm>
using namespace std;
struct suma
{
int val;
int a,b,c;
};
const int N=101;
int v[N],poz[N*N*N],nr;
suma sume[N*N*N];
int cauta(int s)
{
int sol=0,pas=1<<19;
while(pas>0)
{
if(sol+pas<=nr && sume[poz[sol+pas]].val<=s)
sol+=pas;
pas>>=1;
}
return sol;
}
bool cmp(int x, int y)
{
return sume[x].val<=sume[y].val;
}
int main()
{
FILE *in=fopen("loto.in","r");
FILE *out=fopen("loto.out","w");
int n,s,nsume,i,j,k;
nr=0;
bool gasit=0;
fscanf(in,"%d%d",&n,&s);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&v[i]);
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
{
nr++;
sume[nr].val=v[i]+v[j]+v[k];
sume[nr].a=i;
sume[nr].b=j;
sume[nr].c=k;
}
for(i=1;i<=nr;i++) poz[i]=i;
sort(poz+1,poz+nr+1,cmp);
/*for(i=1;i<=nr;i++)
printf("%d ",sume[poz[i]].val);
printf("\n");
//printf("nr=%d\n",nr);
for(i=1;i<=nr;i++)
fprintf(out,"%d ",sume[i].val);
fprintf(out,"\n");*/
for(i=1;i<=nr && gasit==0;i++)
{
j=cauta(s-sume[poz[i]].val);
if(sume[poz[i]].val + sume[poz[j]].val == s) gasit=1;
//printf("gasit=%d, sume[poz[i]]=%d, sume[poz[j]]=%d\n",gasit,sume[poz[i]],sume[poz[j]]);
}
i--;
if(gasit)
{
fprintf(out,"%d %d %d ",v[sume[poz[i]].a],v[sume[poz[i]].b],v[sume[poz[i]].c]);
fprintf(out,"%d %d %d",v[sume[poz[j]].a],v[sume[poz[j]].b],v[sume[poz[j]].c]);
}
else
fprintf(out,"-1");
return 0;
}