Домашние задания: Другие предметы

Дайте мне пожалуйста самую, повторяю ОЧЕНЬ сложную задачу по информатике (текст задачи) Чтоб практически не решалась !!!

Задание такое:

Даны координаты стен в некой комнате в формате начала и конца для каждой стены данной комнаты. Пример координат:
0,0,0,19,19,19,19,0,0,4,4,4,7,7,13,13,13,10,10,19,12,12,0,7,7,7,7,0,0,0,4,4,4,2,7,3,7,5,5,5,3,3,3,2

Задача: Нужно в данной комнате разместить наименьшее количество светильников и рассчитать координаты их наилучшего размещения.
Пример ответа: 2,5,9,11,14,14,1,5,6,1,1,4

Дерзай. Мне такая задача попалась на одной из олимпиад.
Программа должна работать для любого списка с координатами, а не только для данного проверочного.
Галия Соловьева
Галия Соловьева
61 350
Лучший ответ
Для решения этой задачи можно использовать алгоритм жадной оптимизации.

Сначала необходимо отсортировать координаты стен в порядке возрастания. Затем можно начинать расставлять светильники. Первый светильник следует разместить в середине первой стены (координата между началом и концом стены), затем перейти к следующей стене и расставить светильник в середине неосвещенной зоны на этой стене. Продолжать этот процесс до конца комнаты.

Если есть стена, на которой нет неосвещенных зон, можно пропустить ее и перейти к следующей.

Координаты светильников можно записывать в отдельный массив, а затем выводить его на экран.

Я приведу код на С++ )

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
// Входные данные
vector<int> coords = {0,0,0,19,19,19,19,0,0,4,4,4,7,7,13,13,13,10,10,19,12,12,0,7,7,7,7,0,0,0,4,4,4,2,7,3,7,5,5,5,3,3,3,2};
vector<int> lights; // Координаты светильников

// Сортируем координаты
sort(coords.begin(), coords.end());

// Расставляем светильники
int lastLight = -1; // Последний размещенный светильник
for (int i = 1; i < coords.size(); i++) {
// Если на стене нет неосвещенной зоны, пропускаем ее
if (coords[i] == coords[i-1]) continue;

// Расставляем светильник
int lightCoord = (coords[i] + coords[i-1]) / 2;
if (lightCoord != lastLight) {
lights.push_back(lightCoord);
lastLight = lightCoord;
}
}

// Выводим координаты светильников
for (int coord : lights) {
cout << coord << " ";
}
cout << endl;

return 0;
}