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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2017, 15:38   #1
lulia
Пользователь
 
Регистрация: 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.

Подскажите как это сделать?
lulia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пробный тест [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