Pagini recente » Borderou de evaluare (job #910385) | Cod sursa (job #515167) | Cod sursa (job #2856019) | Cod sursa (job #697432) | Cod sursa (job #808762)
Cod sursa(job #808762)
#include <fstream>
using namespace std;
int *v = new int[100], *u = new int[100], *w = new int[100];
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] = v[i];
w[i] = v[i];
}
i = 0; k = 0; p = 0; j = n-1; l = n-1; 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;
}