Pagini recente » Cod sursa (job #3236321) | Cod sursa (job #1379616) | Cod sursa (job #1463507) | Cod sursa (job #477690) | Cod sursa (job #1124263)
#include<cstdio>
#include<algorithm>
using namespace std;
const int Dmax = 1000000,MaxE = 100;
struct element{
int sum,p1,p2,p3;
}v[Dmax + 1];
int a[MaxE+1];
bool cmp(element a, element b){
return a.sum<b.sum;
}
int caut_bin (int x, int nr){
int rez=0,pas=1<<19;
while(pas){
if(rez+pas <= nr && v[rez+pas].sum < x)
rez+=pas;
pas>>=1;
}
return rez;
}
int main (){
FILE *in = fopen ("loto.in","r");
FILE *out = fopen ("loto.out","w");
int n,nr=0,S;
fscanf(in,"%d%d",&n,&S);
for (int i = 1 ; i <= n ; ++i) fscanf(in,"%d",&a[i]);
for(int x = 1 ; x <= n ; ++x)
for(int y = 1 ; y <= n ; ++y)
for(int z = 1 ; z <= n ; ++z){
if(a[x]+a[y]+a[z]<S){
v[++nr].sum=a[x]+a[y]+a[z];
v[nr].p1=x;
v[nr].p2=y;
v[nr].p3=z;
}
}
sort(v+1,v+n+1,cmp);
bool ok = true;
int dr;
for(int i = 1; i <= nr && ok ; ++i){
dr=caut_bin(S-v[i].sum,nr);
if(v[i].sum+v[dr+1].sum==S){
ok=false;
fprintf(out,"%d %d %d %d %d %d\n",a[v[i].p1],a[v[i].p2],a[v[i].p3],a[v[dr+1].p1],a[v[dr+1].p2],a[v[dr+1].p3]);
return 0;
}
}
if(ok==true)
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}