Задание такое:
Даны координаты стен в некой комнате в формате начала и конца для каждой стены данной комнаты. Пример координат:
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
Дерзай. Мне такая задача попалась на одной из олимпиад.
Программа должна работать для любого списка с координатами, а не только для данного проверочного.
Домашние задания: Другие предметы
Дайте мне пожалуйста самую, повторяю ОЧЕНЬ сложную задачу по информатике (текст задачи) Чтоб практически не решалась !!!
Для решения этой задачи можно использовать алгоритм жадной оптимизации.
Сначала необходимо отсортировать координаты стен в порядке возрастания. Затем можно начинать расставлять светильники. Первый светильник следует разместить в середине первой стены (координата между началом и концом стены), затем перейти к следующей стене и расставить светильник в середине неосвещенной зоны на этой стене. Продолжать этот процесс до конца комнаты.
Если есть стена, на которой нет неосвещенных зон, можно пропустить ее и перейти к следующей.
Координаты светильников можно записывать в отдельный массив, а затем выводить его на экран.
Я приведу код на С++ )
#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;
}
Сначала необходимо отсортировать координаты стен в порядке возрастания. Затем можно начинать расставлять светильники. Первый светильник следует разместить в середине первой стены (координата между началом и концом стены), затем перейти к следующей стене и расставить светильник в середине неосвещенной зоны на этой стене. Продолжать этот процесс до конца комнаты.
Если есть стена, на которой нет неосвещенных зон, можно пропустить ее и перейти к следующей.
Координаты светильников можно записывать в отдельный массив, а затем выводить его на экран.
Я приведу код на С++ )
#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;
}
Похожие вопросы
- как решить очень сложную задачу по физике?
- Помогите! Задачи по информатике!Не очень сложные!
- Геометрия 8 класс, неясно как решать объективно не сложную задачу
- Сложная задача. Помогите решить!! ! ABCD -параллелограмм площади S.
- Решите пожалуйста очень срочно задачу (само решение задачи тоже пожалуйста обязательно пишите)
- Сложная задача по геометрии. Равнобедренная трапеция; помогите, пожалуйста!
- Пожалуйста, помогите с графиком к задаче по экономике!
- Зачем в школах, колледжах и ВУЗах, нас учат решать такие сложные задачи. Ведь в жизни их решать и вовсе не приходится.
- Сложные задачи по математике, помогите плиз
- Геометрия. Решить не сложные задачи.