Работает ссылка. Скопирую одну задачу сюда:
Задача B. Коза на привязи.Входной файл – INPUT.TXT
Выходной файл – OUTPUT.TXT
Ограничение времени: 1 секунда на тест
Есть ведь счастливые люди, которым иногда нечего делать. Лежат они на травке, мечтают или придумывают для себя какие-нибудь пустяковые задачки и с удовольствием их решают.
Например: если козу привязать к веревке, а веревку к колышку, вбитому в центр огорода, прямоугольной формы, покрытого зеленой травкой, то какую площадь огорода сможет объесть коза. Представьте себя таким счастливцем и решите эту задачу, условно считая козу точкой.
Формат входного файлав первой строке содержит одно вещественное число R – длину веревки(0<R<100000000)
Во второй строке два вещественных числа x1,y1-координаты левого нижнего угла прямоугольника
В третьей строке два вещественных числа x2,y2-координаты правого верхнего угла прямоугольника
Причем (-1000000<=xi,yi<=1000000 )
Формат выходного файлаодно вещественное число – площадь огорода, объеденного козой.
Площадь вывести с тремя знаками после десятичной точки.
Пример:входной файл
1.0000
-1.000 -1.000
3.000 3.000
выходной файл
3.142
Во второй куча формул, тут они не напишутся...
В общем, задача В довольно простая. Весь алгоритм со всеми формулами писать не буду, ломает вспоминать и выводить их. Для простоты введу сделующие обозначения: a - меньшая сторона прямоугольника, b - б
ольшая.
Тут 3 разных ситуации:
1. Поле очень большое, круг с центром в колышке и радиусом, равным длине верёвки, целиком туда помещается. Условие для проверки: a >= 2*R.
Искомая площадь равна 2*pi*R.
2. Поле очень маленькое, целиком помещается в круг. Проверка: 4*R*R >= a*a+b*b (т.е. диагональ прямоугольника меньше диаметра круга).
В этом случае площадь равна площади прямоугольника - a*b.
3. Поле отсекает часть круга с двух или четырёх сторон.
3а) С двух сторон: a < 2*R, b > 2*R.
Площадь равна площади круга минус два сегмента (см. ниже)
3б) С четырёх сторон: b < 2*R (a<2*R будет автоматически, т.к. a - меньшая сторона)
Площадь равна площади круга минус четыре сегмента.
Как вычислять площадь сегмента.
Пусть радиус круга R, расстояние от центра до "отрезающей" линии - h (в разбираемой задаче будет либо h=a/2, либо h=b/2). Площадь сегмента равна площади сектора минус площадь треугольника (блин, даже ACSII-графикой изобразить не удалось
). В общем, треугольник образован двумя радиусами и "отрезающей линией", его высота = h. Вычисляем половину угла между радиусами как arccos(h/R), удваиваем, получаем весь угол (будем считать, что он в радианах). Площадь сегмента равна площадь_круга * угол / (2*pi), т.к. весь круг - это 2*pi радиан. Далее, площадь треугольника равна половине прооивзедения высоты h и основания (в данном случае основание - это та самая "отрезающая линия"). Длина основания из теорремы Пифагора: L = 2*sqrt(R*R-h*h). Вот и всё.
В случае 3а) нужно из площади круга вычесть два сегмента с расстоянием h=a/2, а в случае 3б) - два сегмента с h=a/2 и ещё два с h=b/2.
Если все эти формулы выписать и привести, наверняка удастся сократить количество вычислений, но я не стану это делать, это к алгоритму уже не относится.