Pagini recente » Cod sursa (job #2264147) | Cod sursa (job #1958568) | Cod sursa (job #794292) | Cod sursa (job #1492929) | Cod sursa (job #1803341)
#include <cstdio>
#include <algorithm>
const int MAX_N = 100;
const int MAX_S = MAX_N * MAX_N * MAX_N;
int v[MAX_N];
struct sum {
int val, b1, b2, b3;
}s3[MAX_S];
bool cmp(sum a, sum b) {
return a.val < b.val;
}
int getPoz(int st, int dr, int val) {
int mid;
while(dr - st > 0) {
mid = (st + dr) / 2;
if(s3[mid].val < val)
st = mid + 1;
else
dr = mid;
}
return dr;
}
int loto[6];
int main() {
int n, top, s;
FILE *fin = fopen("loto.in", "r");
fscanf(fin, "%d%d", &n, &s);
for(int i = 0; i < n; ++i)
fscanf(fin, "%d", &v[i]);
fclose(fin);
std::sort(v, v + n);
top = 0;
for(int i = 0; i < n; ++i)
for(int j = i; j < n; ++j)
for(int k = j; k < n; ++k) {
printf("%d\n", n);
s3[top].val = v[i] + v[j] + v[k];
s3[top].b1 = v[i];
s3[top].b2 = v[j];
s3[top].b3 = v[k];
top++;
}
std::sort(s3, s3 + top, cmp);
int i = -1, j;
bool ok = false;
while(i < top && !ok) {
i++;
j = getPoz(0, i, s - s3[i].val);
if(s3[i].val + s3[j].val == s)
ok = true;
}
FILE *fout = fopen("loto.out", "w");
if(s3[i].val + s3[j].val == s)
fprintf(fout, "%d %d %d %d %d %d", s3[i].b1, s3[i].b2, s3[i].b3, s3[j].b1, s3[j].b2, s3[j].b3);
else
fprintf(fout, "-1");
fclose(fout);
return 0;
}