Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2013, 22:01
Аватар для ___toha___
___toha___ ___toha___ вне форума
Прохожий
 
Регистрация: 18.12.2012
Адрес: Сасово
Сообщения: 23
Версия Delphi: 7
Репутация: 10
Лампочка Задача из старой олимпиады

Здравствуйте.. Мой знакомый ходил на олимпиаду по информатике, 8 класс. Там была задачка. Вообщем никто не решил, спросили меня, я, тоже как-то не додумался. Спрашивал у многих "математиков", но они тоже не знают. Вот уже давно меня мучает эта задача, все-таки как её решить.
Суть:
Есть поле, с размерами X и Y. На нем размещены вышки, радиус действия которых R. Вообщем, дано 3 числа. X Y R. Нужно определить, сколько нужно разместить таких вышек (минимально), чтобы на всем поле была хорошая связь.
Может кто знает? А то я даже с точки зрения математики не пойму, как это.. Должно быть, наверно, что-то легкое, раз 8 классс.
Пример:
Даны числа 24 18 6. А получить нужно число 12.
Может кто знает, как это решить. Буду благодарен. Хотя бы с точки зрения математики
Ответить с цитированием
  #2  
Старый 07.12.2013, 23:32
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Может туплю. Если в вашем примере 6 - это радиус вышек, то если элементарно эти вышки "превратить" в квадраты со стороной
Код:
a=6*sqrt(2)
, то поле размером 24х18 полностью заполнит 9 таких квадратов. Возможно, используется какой-то очень прогрессивный алгоритм...
Ответить с цитированием
  #3  
Старый 07.12.2013, 23:38
Аватар для ___toha___
___toha___ ___toha___ вне форума
Прохожий
 
Регистрация: 18.12.2012
Адрес: Сасово
Сообщения: 23
Версия Delphi: 7
Репутация: 10
По умолчанию

Вот тоже думаю.. Я даже писал таблицу, что если 1 кв.м поля, нужно 5 вышек, радиусом 0,5 кв.м. Если 2 кв.м, то уже 8 вышек, с радиусом 0,5. и т.д. Но ни к чему хорошему это не привело..
Ответить с цитированием
  #4  
Старый 08.12.2013, 00:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если считать область действия вышки квадратом, то да.
Если это все-таки круг и мы считаем, что зона приёма бинарна (либо есть, либо нет), то тогда решением будет кол-во вписанных в окружность квадратов равное площади поля.
Сторона квадрата, вписанного в окружность есть радиус этой окружности. Соответсвтенно, получаем уравнение:
X*Y = N*R^2
Для нашего примера:
24*18=N*6^2
N=(24*18)/(6*6)=4*3=12.
Сходится?
Ответить с цитированием
  #5  
Старый 08.12.2013, 01:07
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от lmikle
Сторона квадрата, вписанного в окружность есть радиус этой окружности.
Диаметр окружности будет соответствовать диагонали вписанного квадрата. Если представить что диагональ квадрата это гипотенуза, то стороны этого квадрата будут катетами прямоугольного треугольника равными в соответствии с теоремой Пифагора := D / Sqrt(2)
где D - это диаметр окружности

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

Последний раз редактировалось poli-smen, 08.12.2013 в 01:13.
Ответить с цитированием
  #6  
Старый 08.12.2013, 20:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от poli-smen
Диаметр окружности будет соответствовать диагонали вписанного квадрата. Если представить что диагональ квадрата это гипотенуза, то стороны этого квадрата будут катетами прямоугольного треугольника равными в соответствии с теоремой Пифагора := D / Sqrt(2)
где D - это диаметр окружности

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


Да, это что-то я ошибся, невнимательно на картинку посмотрел.
Тогда получается 6. Принцип тот же, только площадь вписанного квадрата = 2R^2, соответственно:
X*Y = N*R^2
Для нашего примера:
24*18=N*2*6^2
N=(24*18)/(2*6*6)=2*3=6.
Ну тут либо они тоже ошиблись (причем именно так же, как я), либо тут еще что-то "зарыто".

А кто сказал, что должно получиться именно 12???
Ответить с цитированием
  #7  
Старый 08.12.2013, 21:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
А кто сказал, что должно получиться именно 12???
Вот именно, кто? Даже если взять первое, что приходит в голову (вписанные в окружность квадраты), получается максимум 9 ((24 / (6*sqrt(2))) * (18 / (6*sqrt(2))) с округлением результата делений в большую сторону), но никак не 12.
И кстати, lmikle, думаю нельзя так просто делить площадь - мб не получится покрыть зону именно квадратами и придется добавлять еще точки.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 08.12.2013 в 22:33.
Ответить с цитированием
  #8  
Старый 08.12.2013, 22:35
Аватар для ___toha___
___toha___ ___toha___ вне форума
Прохожий
 
Регистрация: 18.12.2012
Адрес: Сасово
Сообщения: 23
Версия Delphi: 7
Репутация: 10
По умолчанию

12 взялось из примера. Там вот задача, а внизу примеры. Я вот тут тоже думал. У меня общая формула получилась XY/2R^2. Под под второй пример подходит (их там два)
Этот 24 18 6 = 12
И этот еще 24 10 6 = 4
Не получается это потому что это площади. То есть если некая фигура занимает площадь 100 кв.м, то это может быть квадрат, со стороной 10. Но это может быть и, допустим, прямоугольник, со сторонами 5 и 20, или же 2 и 50. А у нас должен получиться именно квадрат. Например, если возьмем по клеткам, 1 кл. будет равна диаметру окр. Допустим у нас будет прямоугольник со сторонами 6 клеток и 2 с половиной клетки. По логике у нас займется 1 строка, то есть 6 квадратов. Вторая - еще 6, итого 12, и третья (хоть не полная, но вышки на нее ставить нужно) еще 6, итого 18. А по программе получается так. 1 и 2 строки как у нас - 12, а вот третья, которая в высоту пол клетки, будет не 6, а 3 (так как в 2 раза меньше) итого 3. Всего получается 15. Ага. Там 18, а тут 15. Нужно значит что-то не так делать.. Но, вроде, мы где-то близко

Может попробовать дополнить размеры поля до числа, которое без остатка делится на диаметр, а потом проделать эти же манипуляции?!

Последний раз редактировалось M.A.D.M.A.N., 09.12.2013 в 20:00.
Ответить с цитированием
  #9  
Старый 08.12.2013, 23:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я уже предложил, как сделать квадратами - делить отдельно длину и ширину поля, округлять результат вверх, умножать. Если сторона квадрата - 4, а поле - 7x9, то по ширине нужно 7/4 = 1 + 3/4 квадрата (округляем до 2, т.к. нужно больше 1) и по высоте 9/4 = 2 + 1/4 квадрата (округляем до 3, т.к. больше 2х). Умножаем, получаем 6 точек всего.
Однако не факт, что это оптимальное покрытие.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 09.12.2013, 10:06
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

У меня для 24 18 6 получилось 9, а для 24 10 6 получилось 6. Это без оптимизации
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #11  
Старый 09.12.2013, 18:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Гм. Пусть ДНА есть квадрат. При алгоритме вычисления по сторонам (округление вверх пропускаю, просто что бы не замусоривать выкладки):
N = (X\R)*(Y\R)
В первом примере получается 12, А вот во втором - 8.
Но это бред. Надо узнать точное условие задачи, а то как в том анекдоте про Шаляпина...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter