Олимпиадная информатика - 2010

Разбор и решение задач муниципального уровня 2010-11 года

Задача «Новая школа»

Директор одной школы решил построить новое здание в какой-нибудь точке нашего города. Он решил построить его так, чтобы суммарное расстояние, которое проезжают ученики от своих домов до школы, было минимально. Для упрощения задачи план города можно представить в виде целочисленной сетки с единичным шагом. Школьник, добираясь до нового здания, может двигаться только по сторонам этой сетки.

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

Входные данные

Первая строка входного файла содержит число N - количество учеников в школе (1<N<500). Каждая из последующих N строк содержит координаты дома школьника - два целых числа из диапазона [-32767, 32767], разделенных пробелом.

Выходные данные

Ваша программа должна вывести в выходной файл координаты места для постройки здания - два целых числа, записанных через пробел.

INPUT.TXT
4
0 0
0 0
1 1
2 2
OUTPUT.TXT
0 1

посмотреть текст программы здесь

Разбор задачи №3 "Новая школа"
предложено Песковым Аркадием Геннадьевичем, МОУ «Сюкеевская средняя общеобразовательная школа»

Камско-Устьинского муниципального района РТ

Для каждой точки города найдем сумму расстояний до места проживания каждого школьника и выберем ту, где эта сумма минимальна. Хранить в памяти весь двумерный массив [-32767..32767, -32767..32767,] нецелесообразно. Оптимизируем решение. Во-первых сразу понятно, что располагать школу западнее (левее) самого западного (левого) дома с детьми, восточнее самого восточного , южнее самого южного или севернее самого северного невыгодно.

Поэтому параллельно с вводом данных

о координатах запомнить максимум и минимум для каждой из их координат и ограничим перебор этими пределами. Во- вторых, координаты оптимального места расположения школы не зависят одна от другой. Расстояние в городе между 2 точками (a;b) и (c;d) равно |a-c|+|b-d|. Мы стремимся минимизировать сумму расстояний от точки (х;у) до точек (a 1 ; b1), (a2;b2),.. (an ; bn). Эта сумма равна (|х- a 1 |+|y - b1|)+ (|х- a 2 |+|y - b2|)+… +(|х- a n |+|y - bn|) = (|х- a1 |+|х- a 2 |+…. +|х- a n |) + (|y - b1|+| y - b2|+… |y - bn|).

Выражение, стоящее в первых скобках никак не зависит от значения выражения во вторых скобках.

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

Возьмём первоначально сумму расстояний заведомо большую любой возможной, на пример М= 70000*500 (70000 заведомо больше самого большого расстояния по одной координате, 500 – предельное значение количества школьников).

В цикле от минимального возможного расположения по вертикали до максимального находим сумму расстояний от улицы с текущем номером до всех домов школьников. Если она меньше М, запоминаем это значение суммы и номер улицы. Затем также ищем оптимальный номер вертикальной улицы. После этого осталось только вывести ответ.

Подобная задача (алгоритм тот же самый) несколько лет назад предлагалась на ЗОНАЛЬНОМ туре олимпиады под названием «Мэрский дом». То, что содержание задачи переработано – это хорошо. Но имеем ещё одно подтверждение того, что сложность для РАЙОННОГО тура завышена.

Hosted by uCoz