Pagini recente » Cod sursa (job #3184448) | Cod sursa (job #1325488) | Cod sursa (job #2155154) | Cod sursa (job #1738914) | Cod sursa (job #473543)
Cod sursa(job #473543)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *fin=fopen("loto.in","r"), *fout=fopen("loto.out","w");
int sum[8000008],S,sm,n,i,j,k,nr[202],tsm,lo,hi,mi;
bool ok;
int main() {
fscanf(fin,"%i %i",&n,&S);
for(i=0;i<n;i++) {
fscanf(fin,"%i",&nr[i]);
}
tsm=-1;
for(i=0;i<n;i++) {
for(j=i;j<n;j++) {
for(k=j;k<n;k++) {
tsm++;
sum[tsm]=nr[i]+nr[j]+nr[k];
}
}
}
sort(&sum[0],&sum[tsm]);
for(i=0;i<tsm;i++) cout<<sum[i]<<"\n";
ok=false;
for(i=0;i<=tsm;i++) {
sm=S-sum[i];
//cout<<"Caut "<<sm<<"\n";
lo=0; hi=tsm;
if (sm>0) {
while(lo+1<hi) {
mi=(lo+hi)>>1;
//cout<<"-----"<<sum[mi]<<"\n";
if (sm<sum[mi]) {
hi=mi;
}
else if (sm>sum[mi]) {
lo=mi;
}
else break;
}
if (sm==sum[lo]) mi=lo; if (sm==sum[hi]) mi=hi;
if (sum[i]+sum[mi]==S) {
ok=true;
fprintf(fout,"%i %i %i %i %i %i",nr[i%n],nr[(i/n)%n],nr[(i/n/n)%n],nr[mi%n],nr[(mi/n)%n],nr[(mi/n/n)%n]);
break;
}
}
}
if (!ok) fprintf(fout,"%s","-1");
fprintf(fout,"%s","\n");
fclose(fout);
return 0;
}