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
Ответы
Ответ:
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 раз и печатает результат.