Pascal ABC

 

ГЛАВНАЯ
ССЫЛКИ
ОЛИМПИАДНЫЕ ЗАДАНИЯ
Очень простые

Проблема с A и B

Трамвайные билеты

Шифр Цезаря

Четные и нечетные члены последовательности

"Мы вас упакуем!"

Простые

Равновеликие прямоугольники

Скобки

 

Уравнение

 

Вирусы

 

КВН

 

Коррекция кода

 

Степень

 

Демократия в опасности

 

Пуговицы

 

A to B

 

Палиндромы

 

Почти Крэг Туми

 

Виза

 

Ездец

 
Средней сложности  

MIME64

 

Куль хацкеры

 

Редкое имя

 

Города

 

Исправления

 

Банки

 

2^n

 

Ниточка

 

Массивище

 

Знакомые

 

Считаем кораблики

Лошадью ходи!

Левые повороты

Прицельное метание помидор

Анаграммы

Треугольник

Принцип компании

Уникальная строка

Конфуз

K-ичные числа

Михаил Густокашин против бюрократии

Агенты

Игра в слова

Сложные

Диски

Домино

Монеты

Программистика

Хитрющая строка

Робот-сапер

Квадраты

Упаковка простых

Оппозиция

 

Замок

 

Многоугольники

 

Электронные часы

 

Дождик

 

Черепаха

 

Метро

 

Террористы

 

Школы

 
Очень сложные/особо интересные  

Система Защиты

 

Бизнес-классики

 

Телеметрия

 

Лесной пожар

 

Олимпиада

 

Автобусный диспетчер

 

 Кубики

 

Электронная почта

 

Автобус

 

 

 

 

ОЛИМПИАДНЫЕ ЗАДАНИЯ

Олимпиадные задачи с рекомендациями к решениям

Задача 33: Прицельное метание помидор

Михаил Густокашин

В детстве у меня было развлечение - кидаться помидорами с балкона, так чтобы забрызгать прогнившими внутренностями помидор прохожих. Я тогда подметил, что на каждый кубический сантиметр помидоры (кстати, она имеет форму идеального шара) приходится квадратный метр поверхности (это объясняется тем, что помидора падает с 7-го этажа и размазывается по большой площади мелкими брызгами). Т.е. помидора объемом в 3 куб. см. забрызгает круг с центром в точке падения площадью 3 кв. м.
Я наметил несколько точек, в которые я точно попаду. В какую из этих точек надо кинуть помидору наименьшего размера, чтобы забрызгать всех прохожих?
Входные данные:
В первой строке входного файла input.txt содержится число n - количество намеченных точек, в следующих n строках - координаты этих точек с точностью до 2 знаков после запятой. В следующей строке содержится m - количество человек, в последующих m строках - координаты людей. 1 <= m, n <= 100. Координаты находятся в промежутке от -100 до 100.
Выходные данные:
В первой строке содержаться координаты точки, в которую надо кидать помидору, а во второй - наименьший радиус r помидоры в сантиметрах.

Пример входных данных:
1
0 0
2
1 0
0.5 0.5
Пример выходных данных:
0.00 0.00
0.91

  Решение:
Первая часть решения похожа на решение задачи Вирусы. Здесь точно так же надо находить максимальное из расстояний от точки до каждого человека, затем среди этих расстояний выбирать наименьшее.
Дальше идет интереснее. Мы нашли наилучшее R - расстояние от точки, до самого дальнего человека. Площадь круга S = Pi * R^2. В то же время объем шара V = 4/3 * Pi * r^3, где r - радиус помидоры в сантиметрах. Т.к 1 куб.см. размазывается по 1 кв.м., то имеем:
R^2 = 4/3 * r^3;
r^3 = 3/4 * R^2;
Введем переменную X = 3/4 * R^2.
Все было бы хорошо, но в Паскале вроде бы нет функции которая считает кубический корень. Его нам придется посчитать самим. Для этого будем использовать способ двоичного приближения (дихотомии). Минимальный возможный радиус примем равный 0, а максимальный - заведомо больше максимально возможного (например 100, потому что таких помидор не бывает :). Примем радиус помидоры за среднее арифметическое минимума и максимума. Если r^3 больше X, то следует приравнять максимум r (действительно, если объем и так больше, то при большем радиусе он будет только увеличиваться), если r^3 меньше X, то приравниваем минимум радиусу. Повторяем эту операцию до тех пор, пока разница между максимумом и минимумом не станет меньше 0.01 или лучше 0.005 (так надежнее). Мы нашли кубический корень с заданной точностью.
Кстати, примерно такой же метод используется при подсчете многих хитрых функций в компьютере.


Далее ð





 


 

 

 
 

СЕРВИС

Copyright © 2008 СОШ №2 им. Н.П. Массонова г.Свислочь © Синица А.А.