Нужно решить две задачи!

Форум для программистов

Сообщение DamNeR » Пн фев 23, 2004 10:59 am

Задачи <a href='http://icrash-overidei.hotbox.ru/train.zip' target='_blank'>здесь</a>
Kill your self, save the planet.

<a href='http://trava.loopback.ru/view.php?id=51287' target='_blank'>http://trava.loopback.ru/view.php?id=51287</a>
DamNeR
Капитан
 
Сообщений: 161
Зарегистрирован: Чт май 29, 2003 6:52 pm
Откуда: TT,Bavly
Пункты репутации: 0

Сообщение Mutter Duhastovich » Пн фев 23, 2004 11:37 am

Или ссылка не работает или одно из двух...
Самец ласки перед тем, как овладеть своей любимой лаской, овладевает еще несколькими ласками. Это и есть "предварительные ласки" =)

Любой день хорош, чтобы быть прожитым или быть последним.
Mutter Duhastovich
Генерал-лейтенант
 
Сообщений: 3229
Зарегистрирован: Сб ноя 29, 2003 7:34 pm
Откуда: Россия г. Новосибирск
Пункты репутации: 5

Сообщение maxovt » Пн фев 23, 2004 11:51 am

2Mutter Duhastovich
У меня работает.

А толку? Не шарю я в программировании...
<span style='color:green'>Kawaii nante sonna koto iccha dame desu!</span>
maxovt
Маршал
 
Сообщений: 7030
Зарегистрирован: Вт июн 03, 2003 2:16 pm
Откуда: Latvija, Rīga
Пункты репутации: 5

Сообщение Флинт » Пн фев 23, 2004 12:12 pm

Работает ссылка. Скопирую одну задачу сюда:

Задача 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.
Если все эти формулы выписать и привести, наверняка удастся сократить количество вычислений, но я не стану это делать, это к алгоритму уже не относится.
Флинт
Майор
 
Сообщений: 368
Зарегистрирован: Пн ноя 25, 2002 9:26 am
Откуда: Москва
Пункты репутации: 0

Сообщение Флинт » Пн фев 23, 2004 12:23 pm

Попробую всё же написать про задачу С.
Если оставить только суть, то нужно вычислить значение одного из базовых симметричных полиномов при заданных аргументах.
Базовые симметричные полиномы:
s1(x1, ..., xn) = x1+x2+...+xn
s2(x1, ..., xn) = x1*x2+x1*x3+...+x1*xn+x2*x3+x2*x4+...+x2*xn+.....+x(n-1)*xn
s3(x1, ..., xn) = сумма всевозможных проризведений xi по 3 (xi*xj*xk, где 1<=i<j<k<=n)
.....
sn(x1, ..., xn) = x1*x2*...*xn

Заданы: n, k, x1, ..., xn.
Найти: sk(x1, ..., xn).

Пока что кроме тупого прямого подсчёта в голову ничего не приходит, но в задаче указано ограничение времени - 1 сек. Ограничения по параметрам: (1 <= K <= N <= 50), (0 <= xi <= 10). Прямой подсчёт вроде должен уложиться на современных компах, но надо проверять.
Последний раз редактировалось Флинт Пн фев 23, 2004 12:24 pm, всего редактировалось 1 раз.
Флинт
Майор
 
Сообщений: 368
Зарегистрирован: Пн ноя 25, 2002 9:26 am
Откуда: Москва
Пункты репутации: 0

Сообщение DamNeR » Пн фев 23, 2004 4:38 pm

Всем пасиб, но уже сами справились!
Kill your self, save the planet.

<a href='http://trava.loopback.ru/view.php?id=51287' target='_blank'>http://trava.loopback.ru/view.php?id=51287</a>
DamNeR
Капитан
 
Сообщений: 161
Зарегистрирован: Чт май 29, 2003 6:52 pm
Откуда: TT,Bavly
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron