|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.12.2017, 15:38 | #1 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 21
|
Пробный тур олимпиады
Добраться до базы
Ограничение времени: 2.0 секунды Ограничение памяти: 256 МБ При посадке на поверхность планеты Колонния, представляющей собой бесконечную плоскость с введённой на ней декартовой системой координат, десантник Шагаев оказался в точке (xd,yd). Вообще-то, ему хотелось бы оказаться в точке (xb,yb), где расположена база, поэтому он направился туда кратчайшим путём. Дело осложняется тем, что на поверхности планеты от прежней цивилизации остались N колонн прямоугольного сечения со сторонами, параллельными осям координат (которые, собственно, и вводились из этих соображений). Известны координаты двух противоположных вершин каждой из колонн: (xi1,yi1) и (xi2,yi2). Известно, что прямоугольники колонн имеют ненулевую площадь и что у каждой пары разных колонн нет общих точек. Конечно, Шагаев не может проходить сквозь колонны, но может двигаться вплотную к их вертикальным стенам. Начальная и конечная точка маршрута находятся вне этих колонн. Какое наименьшее расстояние должен пройти десантник, чтобы достигнуть цели? Исходные данные В первой строке через пробел перечислены четыре числа xd, yd, xb, yb — координаты десантника и базы. Вторая строка содержит целое число N — количество колонн (0 ≤ N ≤ 40). Следующие N строк содержат описания колонн: в строке с номером i+2 содержатся координаты xi1, yi1, xi2, yi2. Все координаты являются целыми числами, по модулю не превосходящими 10000. Числа в строках разделяются пробелами. Результат В первой строке выходного файла должно содержаться единственное вещественное число — длина кратчайшего пути с тремя верными знаками после запятой. Примеры исходные данные результат 1 0 2 0 1.00000 0 -1 0 2 0 3.8284271 1 0 -1 1 1 Я решила только для данных предложенных примеров. Не могу сделать, чтобы считалось для разного количества колоний. У меня получилось так (решаю в Паскаль): var a,b,c,d,q,h,v,f,g,z,m,l,k,t,o,s,r:r eal; i,n:integer; begin read(a,b,c,d); read(n); for i:=1 to n do readln(q,h,v,f); if n=0 then begin write(sqrt(sqr(a-c)+sqr(b-d)));exit;end else g:=a-q; z:=b-h; m:=sqrt(sqr (g) + sqr (z)); l:=abs(a-q); k:= f-d; t:=v-c; o:= sqrt (sqr (t) + sqr (k)); r:=m+l+o; writeln(r); end. Подскажите как это сделать? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
пробный тест [C++] | 25-й кадр | Помощь студентам | 28 | 18.07.2015 09:56 |
Как вставить Flash виртуальный тур? | Anastasia748 | Общие вопросы Web | 23 | 07.05.2015 16:32 |
Тур коня | McFrey | Помощь студентам | 3 | 16.12.2011 22:18 |
Пробный срок работы БД | VistaSV30 | Microsoft Office Access | 3 | 04.03.2010 22:44 |
Голосование Второй тур! | zetrix | Свободное общение | 7 | 24.11.2007 08:40 |