В
Все
Х
Химия
В
Видео-ответы
А
Алгебра
Г
Геометрия
О
ОБЖ
Д
Другие предметы
У
Українська література
Р
Русский язык
Б
Беларуская мова
У
Українська мова
Э
Экономика
Ф
Физика
М
Математика
Ф
Французский язык
Г
География
И
Информатика
М
МХК
О
Окружающий мир
П
Психология
Н
Немецкий язык
О
Обществознание
П
Право
И
История
М
Музыка
Л
Литература
Қ
Қазақ тiлi
Б
Биология
А
Английский язык
kotuk333
kotuk333
12.09.2022 19:29 •  Информатика

Паскаль. вова попал на космическом корабле на бесконечную плоскую планету в точку с координатами (x1, y1). вова, кораблем, имеет возможность за одну секунду телепортироваться из точки (x, y) в одну из точек (x+c, y+c), (x+c, y-c), (x-c, y+c), (x-c, y-c), где c - произвольное натуральное число, которое можно изменять на каждом ходу. требуется написать программу, которая определит, через какое минимальное время вове удастся достичь точки (x2, y2). входные данные входной файл input.txt содержит в первой строке числа x1, y1, во второй – x2, y2. все числа целые от нуля до 106. точки (x1, y1) и (x2, y2) не . выходные данные выходной файл output.txt должен содержать одно число – минимальное время телепортации. если такая телепортация невозможна, то вывести 0.

Ответ:
lizadorfv
lizadorfv
04.10.2020 06:01
1. Заметим, что такими манипуляциями нельзя поменять чётность произведения xy, где (x, y) - текущие координаты корабля. Если угодно, можно представить бесконечное поле для шахмат, корабль ходит как слон - только по диагонали, поэтому цвет поля не меняется.
2. Естественно "развернуть" координаты так, чтобы "горизонтальное" и "вертикальное" направления были вдоль диагоналей. Это делается путем преобразования x' = x + y, y' = x - y.
3. В новых координатах корабль может ходить по горизонтали и вертикали, при этом в любую достижимую точку он придет не более чем за 2 шага. За 1 шаг он придет, если стоит в той же горизонтали или вертикали.
4. Для простоты сдвинем начало координат в начальную точку, тогда точка назначения будет иметь координаты x' = (x2 - x1) + (y2 - y1), y' = (x2 - x1) - (y2 - y1)

Решение, PascalABC.NET:

begin
  var inf := OpenRead('INPUT.TXT');
  var outf := OpenWrite('OUTPUT.TXT');
  var x1, x2, y1, y2: longint;
  read(inf, x1, y1, x2, y2);
  if (x1 * y1 - x2 * y2) mod 2 = 0 then
  begin
    (x2, y2) := ((x2 - x1) + (y2 - y1), (x2 - x1) - (y2 - y1));
    if x2 * y2 = 0 then
      write(outf, 1)
    else 
      write(outf, 2);
  end
  else
    write(outf, 0);
  close(inf);
  close(outf);
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?