Pagini recente » Cod sursa (job #757652) | Cod sursa (job #3130644) | Cod sursa (job #1696447) | Cod sursa (job #2771806) | Cod sursa (job #963938)
Cod sursa(job #963938)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *f=fopen("loto.in","r"), *g=fopen("loto.out","w");
struct numere{
long int val, unu, doi, trei;
}sume[1000005];
long int n, s, v[105], ind=0;
void citire(){
long int i;
fscanf(f,"%ld %ld",&n,&s);
for(i=1;i<=n;i++){
fscanf(f,"%ld",&v[i]);
}
}
void comb(){
long int i, j, k;
for(i=1;i<=n;i++){
for(j=i;j<=n;j++){
for(k=j;k<=n;k++){
ind++; sume[ind].unu=v[i]; sume[ind].doi=v[j]; sume[ind].trei=v[k]; sume[ind].val=v[i]+v[j]+v[k];
}
}
}
// for(i=1;i<=ind;i++){fprintf(g,"%ld\n",sume[i].val);}
}
bool cmp(numere a, numere b){
if(a.val<b.val){return 1;}
return 0;
}
long int cb(long int w){
long int k1, k2, mij;
if(ind==1 && w==sume[1].val){return 1;}
k1=1; k2=ind; mij= (k1+k2)/2;
while(k1<k2){
if(w==sume[mij].val){return mij;}
else{
if(w<sume[mij].val){k2=mij;}
else{k1=mij;}
}
if(k1+1==k2 && w!=sume[k1].val && w!=sume[k2].val){return -1;}
mij= (k1+k2)/2;
}
return -1;
}
void rez(){
long int i, ok, afis=0;
for(i=1;i<=ind;i++){ //printf("%ld\n",i);
ok=cb(s-sume[i].val);
if(ok!=-1){afis=1;fprintf(g,"%ld %ld %ld %ld %ld %ld\n",sume[i].unu,sume[i].doi,sume[i].trei,sume[ok].unu,sume[ok].doi,sume[ok].trei);break;}
}
if(afis==0){fprintf(g,"-1");}
}
int main(){
citire();
comb();
sort(sume+1,sume+ind+1,cmp);
rez();
return 0;
}