С Новым годом! Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
2 / 2 / 1
Регистрация: 04.02.2017
Сообщений: 31

Задача "Столица"

16.04.2017, 11:42. Показов 4858. Ответов 14

Студворк — интернет-сервис помощи студентам
В некотором царстве, в некотором государстве было N городов, и все они, судя по главной карте императора, имели целые координаты. В те годы леса были дремучие, дороги же строить умели только параллельно осям координат, так что расстояние между двумя городами определялось как |x1 - x2| + |y1 - y2|. Император решил построить N+1-ый город и сделать его столицей своего государства, при этом координаты столицы также должны быть целыми. Место для столицы следует выбрать так, чтобы среднее арифметическое расстояний между столицей и остальными городами было как можно меньше. Однако, разумеется, столицу нельзя строить на месте существующего города. Нелегкая задача выбрать место для столицы поручена Вам.

Ввод
Первая строка содержит число N (1 ≤ N ≤ 100). Следующие N строк содержат координаты городов - пары целых чисел, не превышающих 1000 по абсолютной величине.
Вывод
Выведите два целых числа - координаты точки, где следует построить столицу. Если решений несколько, выведите любое.

Ввод
4
0 0
1 1
0 1
1 0
Вывод
0 -1
,
Можете написать программу на с++ или хотя бы алгоритм показать как надо решить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2017, 11:42
Ответы с готовыми решениями:

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

Столица королевства
В некотором царстве, в некотором государстве было S городов, и все они, судя по главной карте императора, имели целые координаты. В те годы...

Hashmap страна и столица
Нужно создать hasmap страна столица, чтобы пользователь вводил страну(записанной в список) и консоль выводила ее столицу

14
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.04.2017, 12:30
Цитата Сообщение от devcpp Посмотреть сообщение
чтобы среднее арифметическое расстояний между
Имхо, среднее арифметическое - излишне. Достаточно просто минимизировать сумму расстояний.

Добавлено через 13 минут
Цитата Сообщение от devcpp Посмотреть сообщение
столицу нельзя строить на месте существующего города.
Если бы не это условие, то задача совсем проста. Просто берем медианную координату по x - xM, по y - yM, и строим столицу в точке (xM, yM). Это для нечетного количества городов. В четном случае у нас получается квадрат (возможно, вырожденный) из самых близких к медианным значениям.
Поясню, что я имею в виду под "медианой". Для ряда 0 3 4 25 100 1000 1001 медианой будет 25
Для ряда 0 3 4 25 100 1000 1001 2000 "медианными" значениями будут 25 100. В первом случае столицу нужно строить в точке 25. Во втором - в любой точке 25 <= x < 100. Аналогично по координате Y.
Но в данном случае дело осложняется тем, что "хорошие" точки уже могут быть заняты существующими городами. Тогда, наверное, подойдет любая ближайшая (в смысле заданной метрики) незанятая точка.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
16.04.2017, 14:37
devcpp
Вам надо найти минимум функции
|x - x1| + |x - x2| + ... + |x - xN| + |y - y1| + |y - y2| + ... + |y - yN|
поскольку |x| <= 1000 и |y| <= 1000 , то простой перебор
решит эту задачу. Дополнительно вам нужно задать
два массива содержащие координаты x1, x2,....y1, y2, ...
Эти массивы нужны также, чтобы пропустить координаты
существующих городов.
...
Меня заинтересовала эта задача. Пожалуй её можно решить
быстрее. Как? Надо сделать два перебора. Отдельно по икс и
Отдельно по игрек. Две минимальные величины и дадут
координаты столицы.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.04.2017, 16:13
Цитата Сообщение от echs Посмотреть сообщение
Надо сделать два перебора
Да не надо никаких переборов! Лишняя трата своего и машинного времени. Просто берете середину, вот и все.
Смотрите. Пусть есть ряд 1 20 100. В точке 20 сумма расстояний = 99 А в точке 21 - 100. При сдвиге направо от любой точки расстояние до точек расположенных левее увеличивается. До точек расположенных правее уменьшается на то же дельта (до каждой) Вот и вся высшая математика.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
16.04.2017, 17:34
Славный Байт,
Вы меня извините, но что вы подразумеваете под СЕРЕДИНОЙ?
Элементы статистики тут не пройдут. Города могут быть в одной
куче (или в двух) где-нибудь с краю. Вы мне друг, но истина тоже
мой друг. Давайте жить дружно.
Может я ошибаюсь. Вы не могли бы на примере трёх городов
указать на мои ошибки? Буду очень вам благодарен.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.04.2017, 18:21
Лучший ответ Сообщение было отмечено echs как решение

Решение

Не по теме:

Цитата Сообщение от echs Посмотреть сообщение
Вы мне друг, но истина тоже мой друг.
Согласен. Истина даже дороже:)

Цитата Сообщение от echs Посмотреть сообщение
Вы не могли бы на примере трёх городов
Зачем же так себя ограничивать? Мы города не экономим, все равно они не наши. Только можно в одномерном случае? На двумерный вы сами легко обобщите.
Вот координаты городов
1 2 4 5 10 40 50 100
Столицу надо строить между городами 5 и 10. И нигде больше.
Попробуйте ее сместить в точку 3 посмотрите, что получится (хоть там и сгущение)
Вообще, поставьте столицу в любую точку. И посмотрите, что происходит с расстояниями, как они изменяются при ее смещении на 1 км влево или вправо. И что происходит при перепрыгивании через какой-то город.
А вот нечетная ситуация 1 3 25. Если бы не ограничение (тоже мне, Петр Первый нашелся!) столицей должен стать город в точке 3. Но поскольку мы не можем идти против воли Его Величества, то строить будем на 2-м или 4-м километре (без разницы)

Добавлено через 5 минут
Может быть вас лучше убедит (и проще считать) крайний случай - 2 города. Так вот тут столицу можно строить в любом месте отрезка их соединяющего. Сумма расстояний все равно будет равной длине отрезка.
А для двумерного случая - в любой точке прямоугольника (включая границы), противоположными вершинами которого будут эти города.
Не поленитесь, нарисуйте картинку, посчитайте отрезки...

Добавлено через 23 минуты

Не по теме:

echs, если будет не лень, и делать будет нечего, гляньте задачку
Вычитать из массива числа пока сумма элементов больше нуля
Хоть ТС там - парень не слишком вежливый, но задачка, имхо, любопытная...Имхо, в вашем стиле...

1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
16.04.2017, 19:22
Цитата Сообщение от Байт Посмотреть сообщение
Зачем же так себя ограничивать? Мы города не экономим, все равно они не наши. Только можно в одномерном случае? На двумерный вы сами легко обобщите.
Вот координаты городов
1 2 4 5 10 40 50 100
Столицу надо строить между городами 5 и 10. И нигде больше.

Примеры какие-то подтасованные и все равно непонятно, о какой "середине" идет речь.

У нас может быть много городов на одном краю диапазона и один единственный город на другом. Пусть у нас есть 900 городов с координатой 0 и один город с координатой 1000. Понятно, что оптимальная точка для столицы при этом будет точкой с координатой 1.

И где тут "середина"?

Понятно, что в общем случае нас интересует центр масс, а не какая-то "середина". Но в данном случае - в метрике L1. В этой метрике двумерная задача действительно распадается на две одномерные. То есть просто усредняем каждую координату по отдельности и, если место занято, ищем ближайшее свободное место.
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
16.04.2017, 20:39
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И где тут "середина"?
Средина - по количеству. Чтобы слева и справа было одинаковое число городов.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.04.2017, 20:52
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И где тут "середина"?
Уважаемый Shamil1 вам ответил. Этого недостаточно?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
нас интересует центр масс,
При чем тут массы?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Примеры какие-то подтасованные
Да возьмите любой пример, который вам в голову придет. И посмотрите. Можете даже программку простую составить. При нечетном количестве оптимальной будет средняя точка. При четном - любая точку между двумя средними.
Все так просто, что даже смешно.
0
2 / 2 / 1
Регистрация: 04.02.2017
Сообщений: 31
20.04.2017, 18:42  [ТС]
Байт,
Цитата Сообщение от Байт Посмотреть сообщение
Столицу надо строить между городами 5 и 10. И нигде больше.
почему именно там а не на 4 40
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.04.2017, 20:14
Цитата Сообщение от devcpp Посмотреть сообщение
почему именно там а не на 4 40
А вы попробуйте, как говаривал полковник Най-Турс. Просто поместите столицу в любом другом месте, и посчитайте сумму расстояний. А потом подвигайте ее. +1, -1... И посмотрите, что с этими расстояниями происходит, как изменяется каждое...

Добавлено через 1 час 15 минут
Друзья! Я должен признаться, что по этой задаче у меня есть некоторая фора перед вами. Дело в том, что когда я был еще в щенячьем возрасте и озаботился трудоустройством, в одном из знакомых институтов возникла подобная задача. Что-то типа размещения главного телефонного узла в здании больницы (Вай-Фая тогда еще не было). И зная меня, как подающего надежды программиста (а я, конечно, обещал все сделать в лучшем виде, и кой-какие соображения насчет переборов у меня были), пригласили в это НИИ, даже не взирая на некоторые отягчающие обстоятельства типа 5-го пункта. И вот, ожидая приема в отделе кадров, я что-то чиркал на листочке, искал оптимальности, дошел чуть ли но "ветвей и границ". И вдруг - все увидел!
Кадровичка была смущена моим безумным глазом. "вот, еще одного психа принесло в наш дружный коллектив!". Но все обошлося.
Мне б, дураку, сделать надменный вид, мол пишу очень сложную программу... А я с места в карьер все начальничкам и рассказал. Типа, задачка-то - школьная. стройте вашу станцию в этом квадрате (кубе) и показал как эта вся "оптимизация" получается. И как бы оказался не у дел.
Но ничего, опять обошлось. Подвалили потихонечку другие задачки... Не подвел я коллектив
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
20.04.2017, 23:02
Суть этой задачи не в нахождении идеального места для столицы, а в нахождении наилучшего свободного места.

Мы считываем координаты всех городов в некоторую структуру данных, одновременно вычисляя "идеальный квадрат" (любая или обе стороны квадрата могут быть вырождены). Если идеальные места заняты, то нам нужно быстро отвечать на вопросы типа "сколько городов на данной горизонтали/вертикали" и "есть ли город в данной точке".
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.04.2017, 23:25
Цитата Сообщение от Shamil1 Посмотреть сообщение
а в нахождении наилучшего свободного места.
Дык, особых сложностей не вижу. Если квадрат занят, так берем ближайшие пустые места (в смысле заданной метрики) простым обходом по внешней стороне квадрата. Хотя, возможно, в двумерном случае там и будут ньюансы.
Тут важно понять простую вещь. Что разность городов на восток и запад, а также на север - юг от столицы должна быть минимальна. Не расстояний - они образуются сами, а именно количества городов. Или количества жителей, если император заботится о социальной справедливости.
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
21.04.2017, 00:06
Цитата Сообщение от Байт Посмотреть сообщение
Если квадрат занят, так берем ближайшие пустые места (в смысле заданной метрики) простым обходом по внешней стороне квадрата.
Ближайшие пустые места не равноценны. Нужно выбрать из них лучшее.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.04.2017, 11:40
Цитата Сообщение от Shamil1 Посмотреть сообщение
Ближайшие пустые места не равноценны. Нужно выбрать из них лучшее.
Ну вот и выбирайте! Но - из ближайших. Далеко ходить (кодить ) не надо.
И вообще-то, я предупредил
Цитата Сообщение от Байт Посмотреть сообщение
Если бы не это условие, то задача совсем проста.
Цитата Сообщение от Байт Посмотреть сообщение
Но в данном случае дело осложняется тем, что "хорошие" точки уже могут быть заняты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2017, 11:40
Помогаю со студенческими работами здесь

Записи. Данные о государстве: название, площадь, население, столица
Описать заданный тип, осуществить ввод данных, произвести определенные операции и вывести на печать значение полей (где возможно)....

Столица страны и страна. Вывод столицы по введенной стране
Столица страны и страна. Вывод столицы по введенной стране.

Составить программу, определяющую какой стране относится указанная столица
Определить два перечислимых типа: страны и столицы. Нужно составить программу, определяющую какой стране относится указанная столица.

Столица государства, как город с экстраординарным государственным режимом государственной и муниципальной службы
https://www.cyberforum.ru/members/178418/albums/614/7191t.gifМинистерство здравоохранения предупреждает: вдумчивое чтение нижеследующего...

Написать программу, в которой при выборе какой то страны мира выводятся ее денежная единица и столица
помогите пожалуйста очень очень нужно: Написать программу,в которой при выборе какой то страны мира выводятся ее денежная единица и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru