• Предмет: Информатика
  • Автор: zajcevarozana
  • Вопрос задан 5 месяцев назад

100 баллов!! (python 3.8 и другие языки программирования, но указать)

Дан правильный многоугольник, вершины которого занумерованы по часовой
стрелке последовательными целыми числами от 1 до N.

Вам нужно отвечать на запросы следующего вида:

Найти угол между прямой a, проходящей через две различные вершины
A1 и A2, и прямой b, проходящей через две различные вершины
B1 и B2, измеренный в градусах.

Углом между двумя прямыми считается значение угла в интервале от 0 (параллельные или
совпадающие прямые) до 90 (перпендикулярные прямые) градусов.
Формат входных данных
Первая строка входных данных содержит два целых числа N (3 ≤ N ≤ 64) и Q (1 ≤ Q ≤ 105) — количество вершин правильного многоугольника и количество запросов соответственно.

i-я из последующих Q строк содержит по четыре целых числа
A{i,1}, A{i,2}, B{i,1}, B{i,2}
(1 ≤ A{i,1}, A{i,2}, B{i,1}, B{i,2} ≤ N, A{i,1} ≠ A{i,2}, B{i,1} ≠ B{i,2} ) — номера вершин,
через которые проходят прямые a и b, соответственно.
Формат выходных данных
Для каждого запроса выведите угол между прямыми в градусах с абсолютной
или относительной погрешностью не хуже 10-4.
Пример 1
Входные данные:
5 6
2 1 1 5
1 5 5 1
1 2 3 4
3 1 2 4
2 1 3 1
1 4 3 2
Выходные данные:
72.000000
-0.000000
36.000000
72.000000
36.000000
-0.000000

Ответы

Ответ дал: asilvejstruk
0

Ответ:

import math

def angle_between_lines(A1, A2, B1, B2, N):

   A1, A2, B1, B2 = A1-1, A2-1, B1-1, B2-1

   angle1 = (A2 - A1 + N) % N

   angle2 = (B2 - B1 + N) % N

   angle = abs(angle1 - angle2)

   return min(angle, N - angle)

N, Q = map(int, input().split())

for i in range(Q):

   A1, A2, B1, B2 = map(int, input().split())

   print(angle_between_lines(A1, A2, B1, B2, N))

Объяснение:

Этот код определяет функцию angle_between_lines(A1, A2, B1, B2, N), которая принимает индексы двух вершин каждой линии и общее количество вершин в многоугольнике и возвращает угол между двумя линиями в градусах. Функция сначала преобразует индексы вершин из 1 в 0, затем вычисляет углы линий, вычитая индексы и принимая модуль с N для учета циклического характера многоугольника. Наконец, он находит абсолютную разницу между углами и возвращает наименьшую из этой разницы и разницы между углами и N.

Затем код считывает ввод, вызывает функцию Q раз и печатает результат.

Вас заинтересует