Pagini recente » Cod sursa (job #37519) | Cod sursa (job #1335963) | Cautari ortogonale | Cod sursa (job #542415) | Cod sursa (job #490486)
Cod sursa(job #490486)
#include<cstdio>
#include<fstream>
#include<algorithm>
using namespace std;
#define m 101
struct loto{
int s;
int s1;
int s2;
int s3;
};
int v[m];
int n,s,ii;
loto a[m*m*m];
void inline read (){
ifstream in ("loto.in");
in>>n>>s;
for(int i=1;i<=n;++i)
in>>v[i];
in.close ();
}
void inline add (){
for(int i=1;i<=n;++i)
for(int j=i;j<=n;++j)
for(int k=j;k<=n;++k){
a[++ii].s=v[i]+v[j]+v[k];
a[ii].s1=v[i];
a[ii].s2=v[j];
a[ii].s3=v[k];
}
}
bool inline compara (loto b1,loto b2){
return b1.s<b2.s;
}
int main (){
read ();
add ();
sort (a+1,a+ii+1,compara);
freopen ("loto.out","w",stdout);
for(int st,i=1,dr,ss;i<=ii;++i){
dr=ii;
st=1;
ss=s-a[i].s;
for(;st<=dr;){
int mj=(st+dr)>>1;
if(ss==a[mj].s){
printf("%d %d %d %d %d %d\n",a[i].s1,a[i].s2,a[i].s3,a[mj].s1,a[mj].s2,a[mj].s3);
return 0;
}
else
if(ss>a[mj].s)
dr=mj-1;
else
st=mj+1;
}
}
printf("-1");
return 0;}