Как найти треугольник с максимальным периметром?
Даётся множество точек и надо найти треугольник с самым большим периметром (с вершинами в этих точках). Входные данные: 2<n<101, x и y не больше 10000
#include <iostream>
#include <math.h>
using namespace std;
struct Point
{
int x;
int y;
};
int main()
{
int n;
double max = 0;
cin >> n; //Вводим к-во точек
Point *g = new Point[n];
for (int i = 0; i < n; i++)
{
cin >> g[i].x >> g[i].y; //Вводим координаты каждой точки
}
for (int i = 0; i < n - 2; i++)
{
for (int h = 1 + i; h < n - 1; h++)
{
for (int j = 1 + h; j < n; j++)
{
double a = sqrt(pow(g[i].x - g[h].x, 2) + pow(g[i].y - g[h].y, 2)), b = sqrt(pow(g[i].x - g[j].x, 2) + pow(g[i].y - g[j].y, 2)), c = sqrt(pow(g[j].x - g[h].x, 2) + pow(g[j].y - g[h].y, 2)); //Считаем каждую сторону треугольника
if (a + b > c && a + c > b && b + c > a) //Проверяем возможность существования такого треугольника
{
double p = a + b + c;
if (p > max) //Находим максимальный периметр
max = p;
}
}
}
}
cout << max;
return 0;
}
Оно проходит 19 тестов и стопорится. Скорее всего из-за времени. Как оптимизировать код?
Ответы (1 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Что сразу бросается в глаза:
Я бы один раз вычислил расстояния между всеми парами точек и записал бы в двумерный массив