Cod sursa(job #808778)
#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 (sum < s)
{
if (i <= j)
{
sum -= v[i];
i++;
sum += v[i];
}
else if (k <= l)
{
sum -= u[k];
k++;
sum += u[k];
}
else if (p <= q)
{
sum -= w[p];
p++;
sum += w[p];
}
else smen = true;
}
else if (sum > s)
{
if (i <= j)
{
sum -= v[j];
j--;
sum += v[j];
}
else if (k <= l)
{
sum -= u[l];
l--;
sum += u[l];
}
else if (p <= q)
{
sum -= w[q];
q--;
sum += w[q];
}
else smen = true;
}
else (smen = true);
*/
if (/*sum == s*/ smen) out<<v[i]<<" "<<u[k]<<" "<<w[p]<<" "<<v[j]<<" "<<u[l]<<" "<<w[q];
else out<<-1;
}