Pagini recente » Cod sursa (job #1456081) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #629721) | Cod sursa (job #1093599)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream in ("loto.in");
ofstream out ("loto.out");
int a[101], I[1000001], J[1000001], K[1000001];
int S[10000001];
int l;
int cautbin (int x, int st, int dr){
while (dr - 1 > st){
int mid = st + (dr - st) / 2;
if (S[mid] == x)
return mid;
if (S[mid] < x)
st = mid + 1;
else
dr = mid - 1;
}
if (S[dr] == x)
return dr;
if (S[st] == x)
return st;
else
return -1;
}
int main()
{
int N, Suma, i, j, k, poz, ok, m1, m2;
in >> N >> Suma;
for (i = 1; i <= N; i++)
in >> a[i];
for (i = 1; i <= N; i++)
for (j = i; j <= N; j++)
for (k = j; k <= N; k++)
{
l++;
S[l] = a[i] + a[j] + a[k];
}
ok = 1;
sort(S + 1, S + l + 1);
ok = 0;
for (i = 1; i <= l; i++){
poz = cautbin (Suma - S[i], 1, l);
if (poz > 0){
ok = 1;
m1 = Suma - S[i];
m2 = S[i];
break;
}
}
if(ok == 0) {
out << -1 << "\n";
return 0;
}
for (i = 1; i <= N; i++)
for (j = i; j <= N; j++)
for (k = j; k <= N; k++)
if (m1 == a[i] + a[j] + a[k]) {
out << a[i] << " " << a[j] << " " << a[k] << " ";
break;
}
for (i = 1; i <= N; i++)
for (j = i; j <= N; j++)
for (k = j; k <= N; k++)
if (m2 == a[i] + a[j] + a[k]) {
out << a[i] << " " << a[j] << " " << a[k] << "\n";
break;
}
in.close();
out.close();
return 0;
}