Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на C++

Глухов Алексей Ученик (99), на голосовании 1 неделю назад
Ученые, работающие с элементарными частицами, часто проводят эксперименты по их сталкиванию. Для этого на коллайдере их разгоняют до больших скоростей, а потом регистрируют треки частиц. В качестве результатов одного из таких экспериментов получены данные работы детектора ALICE в виде координат мест регистрации центров частиц на двумерной квадратной матрице и размеров самих частиц. Матрица имеет размеры 1000 на 1000 точек.
Вам необходимо по полученным результатам эксперимента определить точку матрицы, в которой было зарегистрировано максимальное количество частиц.
Для упрощения, форму частицы считать квадратом, сторона которого всегда имеет нечетный размер.

Входные данные:
В первой строке входного файла находится число N - количество частиц, зарегистрированных детектором.
Каждая из следующих N строк содержит по три числа: номер ряда, позиция в данном ряду - натуральные числа, не превышающие 103, размеры частицы (в точках матрицы) - нечетное натуральное число, не превышающее 50. Гарантируется, что все частицы целиком попадают во внутреннюю часть матрицы.

Выходные данные:
Два числа: сумма номера ряда и позиции в этом ряду точки матрицы, в которой было зарегистрировано максимальное количество частиц и количество частиц, зарегистрированных в этой точек. Если подходящих точек найдено несколько, необходимо указать точку, имеющую минимальный номер ряда и максимальну позицию в данном ряду.

Пример входного файла:
5
2 3 3
3 6 5
8 4 1
7 5 5
6 8 3

Ответом для данного примера будет пара чисел 12 3
Голосование за лучший ответ
Kannel Мастер (1118) 1 месяц назад
Ну ты конечно почему тебе кто то должен бесплатно помогать если хочешь я могу тебе помочь за 500 рублей
- Профи (660) 1 месяц назад
#include <iostream>
#include <vector>

using namespace std;

int main() {
int n;
cin >> n;

// Создаем матрицу 1000x1000, инициализированную нулями
vector<vector<int>> matrix(1000, vector<int>(1000, 0));

for (int i = 0; i < n; ++i) {
int row, col, size;
cin >> row >> col >> size;

// Корректируем координаты для нумерации с 0
row--;
col--;

// Учитываем половину размера частицы для определения области влияния
int halfSize = (size - 1) / 2;

// Увеличиваем счетчик для каждой точки в области влияния частицы
for (int dr = -halfSize; dr <= halfSize; ++dr) {
for (int dc = -halfSize; dc <= halfSize; ++dc) {
matrix[row + dr][col + dc]++;
}
}
}

int maxCount = 0;
int maxRow = 0;
int maxCol = 0;

// Находим точку с максимальным количеством частиц
for (int row = 0; row < 1000; ++row) {
for (int col = 0; col < 1000; ++col) {
if (matrix[row][col] > maxCount || (matrix[row][col] == maxCount && row < maxRow)) {
maxCount = matrix[row][col];
maxRow = row;
maxCol = col;
}
}
}

// Возвращаем к нумерации с 1
maxRow++;
maxCol++;

cout << maxRow + maxCol << " " << maxCount << endl;

return 0;
}
Похожие вопросы