Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Олимпиадная задачка...   Найти похожие ветки 

 
infom ©   (2007-03-20 17:25) [0]

Сейчас сижу решаю одну олимпиадную задачу по программированию:

На листочке нарисована сетка со стороной квадратиков в H. Какое максимальное количество целых квадратиков может поместиться внутри окружности с данным радиусом R.

Интересны выши мнения... Есть ли у этой задачи абсолютное решение, т.е. функция F(H, R) возвращающее количество квадратиков ?

Я его не нашел


 
Vlad Oshin ©   (2007-03-20 17:34) [1]


> Есть ли у этой задачи абсолютное решение, т.е. функция F(H,
>  R) возвращающее количество квадратиков ?

есть


> Я его не нашел

я тоже :)
но оно есть, т.к. функция ограничена сверху площадью окружности


 
Ega23 ©   (2007-03-20 17:37) [2]

Смотри в сторону диагонали квадрата.


 
Ketmar ©   (2007-03-20 17:39) [3]

если ты начальник -- то решается элементарно. если подчинённый... не будем о грустном.


 
infom ©   (2007-03-20 17:41) [4]

> [1] Vlad Oshin ©   (20.03.07 17:34)

А мыслей нет куда копать ?

> [2] Ega23 ©   (20.03.07 17:37)

Смотрю.... ничего не вижу кроме его диагонали :) (Шучу, мысль понятна)

> [3] Ketmar ©   (20.03.07 17:39)

Тут уж луше я сам...


 
Ega23 ©   (2007-03-20 17:42) [5]

Стоп. А центр окружности где? В произвольном месте, на ребере или на узле?


 
Ega23 ©   (2007-03-20 17:45) [6]

Если в узле - то достаточно просто. смотришь, сколько целых диагоналей в радиус поместится - ну а дальше всё просто.


 
infom ©   (2007-03-20 17:50) [7]

> [6] Ega23 ©   (20.03.07 17:45)

В том то и сложность, что в задаче про центр ни слова, отсюда вывод.... центр может быть где угодно...


 
Ega23 ©   (2007-03-20 17:52) [8]


> В том то и сложность, что в задаче про центр ни слова, отсюда
> вывод.... центр может быть где угодно...


гм.. Это уже интересней. Но всё равно надо в сторону диагонали смотреть. ИМХО.


 
stud ©   (2007-03-20 18:00) [9]

Ega23 ©   (20.03.07 17:45) [6]
Если в узле - то достаточно просто. смотришь, сколько целых диагоналей в радиус поместится - ну а дальше всё просто.

а не проще ли найти максимально возможный квадрат, который можно вписать в окружность. и соответсвенно потом найти сколько квадратов с заданной стороной в него влезет.
вопрос вроде звучит
infom ©   (20.03.07 17:25)
Какое максимальное количество целых квадратиков может поместиться внутри окружности с данным радиусом R.

так какая разница где окажется центр окружности


 
VirEx ©   (2007-03-20 18:04) [10]

найди площадь окружности, найди площадь одного квадрата - вычисляй)


 
McSimm_   (2007-03-20 18:05) [11]

диаметр разделить на длину диагонали целочисленно и возвести в квадрат...


 
Ega23 ©   (2007-03-20 18:06) [12]


> а не проще ли найти максимально возможный квадрат, который
> можно вписать в окружность. и соответсвенно потом найти
> сколько квадратов с заданной стороной в него влезет.


Не-а. Представь, что размер стороны квадрата в сетке в тыщщу раз меньше стороны вписанного квадрата.


 
Sam Stone ©   (2007-03-20 18:08) [13]

а может сюда задачу о ранце припаять?


 
infom ©   (2007-03-20 18:08) [14]

> [9] stud ©   (20.03.07 18:00)


> [10] VirEx ©   (20.03.07 18:04)


> [11] McSimm_   (20.03.07 18:05)

Просто так решения с потолка предлагать не пойдет...правильных ниодного...


 
stud ©   (2007-03-20 18:11) [15]

Ega23 ©   (20.03.07 18:06) [12]
Не-а. Представь, что размер стороны квадрата в сетке в тыщщу раз меньше стороны вписанного квадрата.

и что???
как вариант sqr(sqrt(r^2) div h)


 
McSimm_   (2007-03-20 18:11) [16]


> > [11] McSimm_   (20.03.07 18:05)
>
> Просто так решения с потолка предлагать не пойдет...правильных
> ниодного...

Как отличить решение "с потолка" от правильного?


 
stud ©   (2007-03-20 18:12) [17]

хотя да, мелочевка не влезет


 
VirEx ©   (2007-03-20 18:14) [18]

причем здесь решение с потолка? я конечно не математик, но вроде так будет самое то:
целое число от(площадь окружности/площадь квадрата)


 
Ega23 ©   (2007-03-20 18:14) [19]


> хотя да, мелочевка не влезет
>


Вот именно.


 
McSimm_   (2007-03-20 18:17) [20]


> VirEx ©   (20.03.07 18:14) [18]

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


 
infom ©   (2007-03-20 18:17) [21]

> [16] McSimm_   (20.03.07 18:11)

Достаточно протестировать на следующих данных
Пример1:
R = 2
H = 1
Ответ = 6

Пример2:
R = 3
H = 1
Ответ = 21


 
VirEx ©   (2007-03-20 18:20) [22]


>  [20] McSimm_   (20.03.07 18:17)

но ведь в ТЗ это и сказано:

> Какое максимальное количество целых квадратиков может поместиться
> внутри окружности

а "остаточная" или "суммарная" площадь здесь будут циферки после запятой которые и отбрасываются, мы ж всетаки количество квадратиков а не площадь вычисляем :)


 
infom ©   (2007-03-20 18:25) [23]

> [22] VirEx ©   (20.03.07 18:20)

Пример2: по вашему получается Пи*9 = 28 с лишним, а ответ 21 ...


 
VirEx ©   (2007-03-20 18:25) [24]

а, всё, дошло :(


 
McSimm_   (2007-03-20 18:28) [25]


> а "остаточная" или "суммарная" площадь здесь будут циферки
> после запятой которые и отбрасываются

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


 
infom ©   (2007-03-20 18:30) [26]

> [21] infom ©   (20.03.07 18:17)

Простите
Пример1:
R = 2
H = 1
Ответ = 7


 
Sam Stone ©   (2007-03-20 18:32) [27]

Максимум по диаметру уместится окрвниз(диаметр/сторона_квадрата). Далее ищем 2 точки на окружности, проводим хорду, параллельную диаметру, на нее лепим еще квадратики. Все это математически выразить и получится то что надо :) Наверно)


 
McSimm_   (2007-03-20 18:32) [28]


> infom ©

я не учел участки вне вписанного квадрата


 
McSimm_   (2007-03-20 18:33) [29]


> на нее лепим еще квадратики.

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


 
VirEx ©   (2007-03-20 18:34) [30]

а если найти площадь одной доли квадрата, т.е. например разделить окружность на четыре дольки, и взять верхний правый кусок? а результат на 4 умножить


 
Sam Stone ©   (2007-03-20 18:35) [31]

> [29] McSimm_   (20.03.07 18:33)

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


 
VirEx ©   (2007-03-20 18:36) [32]

верятность превышения остаточной суммы площади уменьшится

хм. а если делить площадь на n=корень(r) частей?


 
McSimm_   (2007-03-20 18:47) [33]

"поставить" первую точку на окружность на 45 градусов, и запустить рекурсивный обход точек с шагом H от "первой" по всем "соседним" на предмет проверки лежит ли в пределах окружности, не считать точки, у которых отстутствуют соседи внизу и слева. Получится количество квадратиков.

:)


 
Циркуль   (2007-03-20 18:56) [34]

Осталось "45" обосновать :)


 
McSimm_   (2007-03-20 18:59) [35]

да, осталось доказать, что при расположении угла сетки на 45 градусах окружности количество квадратиков максимально.

доказать не могу.


 
Vlad Oshin ©   (2007-03-20 19:00) [36]


> > [1] Vlad Oshin ©   (20.03.07 17:34)
>
> А мыслей нет куда копать ?

читать надо про квадратуру круга, гиппократовы луночки
мне лень что-то, сегодня стока раз переписывал 30 строчечек - ни к какому умственному труду больше не способен :)


 
Sam Stone ©   (2007-03-20 19:10) [37]

> доказать не могу.

Вах! Мамой клянусь, да! :о)


 
Alexis ©   (2007-03-20 20:02) [38]

Через производные(или интегралы) тут как то надо, ИМХО ...


 
MBo ©   (2007-03-20 22:15) [39]

Если ограничения на радиус окружности наложены не очень большие, то обратную задачу вполне можно решать:

Берем один квадратик, описываем окружность мин. радиуса.
Добавляем второй, -//-
Добавляем третий таким образом, чтобы описанная окружность имела мин. радиус и т.д.

При значительном количестве квадратов очередной добавляется так, чтобы он был поближе к центру масс, а далекие не рассматривать, чтобы уменьшить количество вариантов (например, если есть 3x3, то сначала в центры сторон можно добавлять, а к углам - позже)

Кроме того, для ускорения нечто вроде антибинарного поиска можно соорудить - понятно, что зависимость R-N квадратичная, вот и делать округлые наборы из 1-4-9-16 и т.д. квадратов, и при нахождении примерного радиуса уже точнее подбирать.

Задача нахождения покрывающей множество точек окружности - уже достаточно известная в выч. геометрии, сложность - линейная (амортизированная), а для регулярных решеток, как здесь, может быть решение и проще классического варианта.


 
TUser ©   (2007-03-20 22:56) [40]

Не так давно я кубики аналогично складывал. Задача у меня была - сколько кубиков на расстоянии не более чем константа от точки (хотя бы одна точка). Ну, центр тоже где-то в кубике. Тут тоже самое, только надо найти все квадратики, для которых все точки внутри коружности. Найти наибольшее расстояние легко. Следоватльеон, завел массив "инкрементов" + столько-то по осям от данного квадратика, отсортировал его + потом проверка тех квадратов, которые на границе. .... нифига никто не поймет



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.046 c
15-1174214156
PARUS
2007-03-18 13:35
2007.04.15
Пятничные задачки.


15-1174559873
Megabyte
2007-03-22 13:37
2007.04.15
Приматы-программисты :)


15-1174397332
Jeer
2007-03-20 16:28
2007.04.15
Ректор МГУ приказал срочно удалить "пиратский" софт


2-1174633027
Ega23
2007-03-23 09:57
2007.04.15
Наследование фреймов


15-1173870989
Большой Джек
2007-03-14 14:16
2007.04.15
Стрим подешевел до 8 баксов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский