#include <iostream>
#include <stdlib.h>
#include <time.h>
void qS(int ** a, int left, int right)
{
if (left >= right) return;
int pivot = a[0][rand() % (right - left + 1) + left];
int i = left, j = right;
do {
while (a[0][i] < pivot) ++i;
while (a[0][j] > pivot) --j;
if (i <= j) {
if (i < j) {
std::swap(a[0][i], a[0][j]);
std::swap(a[1][i], a[1][j]);
std::swap(a[2][i], a[2][j]);
}
++i;
--j;
}
} while (i <= j);
qS(a, left, j);
qS(a, i, right);
}
int averageOf3(int * a, int n)
{
int ** sum = new int*[3];
for (int i = 0; i < 3; ++i) sum[i] = new int[n * (n - 1) / 2];
int t = 0;
for (int i = 0; i < n - 1; ++i)
for (int j = i + 1; j < n; ++j)
{
sum[0][t] = a[i] + a[j];
sum[1][t] = i;
sum[2][t++] = j;
}
srand((unsigned)time(0));
qS(sum, 0, t - 1);
int count = 0;
for (int i = 0; i < n; ++i) {
int s = 3 * a[i];
for (int j = 0; j < n; ++j) {
int left = 0, right = t - 1, mid, target = s - a[j];
while (left <= right) {
mid = (left + right) / 2;
if (sum[0][mid] == target) {
if (sum[1][mid] != j && sum[2][mid] != j) {
++count;
break;
printf("%d %d %d %d\n", a[j], a[sum[1][mid]], a[sum[2][mid]], a[i]);
}
}
else if (sum[0][mid] < target) left = mid + 1;
else right = mid - 1;
}
}
}
for (int i = 0; i < 3; ++i) delete[] sum[i];
delete[] sum;
return count;
}
int main()
{
int a[100], n;
std::cout << "nhap n: "; std::cin >> n;
for (int i = 0; i < n; i++)
{
std::cout << "Nhap A[" << i << "]=";
std::cin >> a[i];
}
std::cout << averageOf3(a, n) << std::endl;
return 0;
}