Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #631932) | Borderou de evaluare (job #2374381) | Cod sursa (job #808756)
Cod sursa(job #808756)
#include <fstream>
using namespace std;
int *v = (int*)malloc(400), *u = (int*)malloc(400), *w = (int*)malloc(400);
ifstream in("loto.in");
ofstream out("loto.out");
void quickSort(int *v, int stg, int dpt)
{
int i=stg, j=dpt, aux, m=v[(i+j)/2];
while (i <= j)
{
while (v[i] < m) i++;
while (v[j] > m) j--;
if (i <= j)
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
i++; j--;
}
}
if (i < dpt) quickSort(v, i, dpt);
if (stg < j) quickSort(v, stg, j);
}
int main()
{
int n, s, i, sum, j, k, l, p, q;
in>>n>>s;
for (i=0;i<n;i++) in>>v[i];
quickSort(v, 0, n-1);
for (i=0;i<n;i++)
u[i] = w[i] = v[i];
i = k = p = 0; j = l = q = n-1;
if (6 * v[j] < s)
{
out<<-1;
return 0;
}
sum = v[i] + v[j] + u[k] + u[l] + w[p] + w[q];
bool smen = false;
while (!smen && i<=j && k<=l && p<=q)
{
if (sum < s) sum = sum - v[i] + v[++i];
if (sum < s) sum = sum - u[k] + u[++k];
if (sum < s) sum = sum - w[p] + w[++p];
if (sum > s) sum = sum - v[j] + v[--j];
if (sum > s) sum = sum - u[l] + u[--l];
if (sum > s) sum = sum - w[q] + w[--q];
if (sum == s) smen = true;
}
if (smen) out<<v[i]<<" "<<u[k]<<" "<<w[p]<<" "<<v[j]<<" "<<u[l]<<" "<<w[q];
else out<<-1;
}