Районная олимпиада по информатике. 2008-2009 учебный год.
Есеп A. Шеңбер
Шеңберде бірдей қашықтықта $N$ нүктелер белгіленген, олар қарсы сағаттық тілдің бүтін сандармен $1$-ден $N$-ға нөмірленген. Сіздерге осы шеңбердің бірнеше қос хордалар берілген, хорданын ұштары сол нүктелер болады. Әрбір қос хордалар үшін анықтаңыздар, олар қиылып кетеді ма, немесе қиылымайды (сүйкелмейген хордалар қиылғаң деп саналады).
4 3 1 3 2 4 1 2 3 4 1 2 3 2Ответ
YES NO YES
Комментарий/решение:
def check_intersection(a1, b1, a2, b2):
# Упорядочим точки на каждой хорде
if a1 > b1:
a1, b1 = b1, a1
if a2 > b2:
a2, b2 = b2, a2
# Проверка пересечения или касания
if (a1 == a2 or a1 == b2 or b1 == a2 or b1 == b2 or
a1 == b1 or a2 == b2):
return "YES"
elif b2 < a1 or a2 > b1 or (a1 < a2 and b2 < b1) or (a2 < a1 and b2 > b1):
return "NO"
else:
return "YES"
def main():
# Ввод количества точек и количества пар хорд
n, k = map(int, input("Введите количество точек и количество пар хорд (n k): ").split())
results = []
# Ввод каждой пары хорд и проверка пересечения
for _ in range(k):
a1, b1, a2, b2 = map(int, input("Введите концы хорд (a1 b1 a2 b2): ").split())
# Проверяем пересечение
result = check_intersection(a1, b1, a2, b2)
results.append(result)
# Вывод результатов
print("\n".join(results))
if __name__ == "__main__":
main()
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.