Поиск по этому блогу

среда, 15 января 2020 г.

Дачники

Всем известно, что дачники – народ странный, почти такой же, как и программисты. Строят они свои дачи непонятно где, да и выращивают там непонятно что и непонятно зачем. А уж как они туда добираются, это другая история: кто на автобусе, кто на электричке, кто на автомобиле, ну а кто-то вовсе пешком ходит от дома и до самого участка. Так что не стоит удивляться, если вдруг Вы узнаете, что некое садоводческое товарищество располагается на острове, а дачники добираются до него самолетом. Да еще и на этом острове может не быть посадочной полосы, так что высадиться на остров можно, только прыгая с парашютом (мы уж не рассматриваем то, как они возвращаются с дач домой). Рассмотрим этот уникальный случай. Пилот всегда старается осуществить высадку парашютистов таким образом, чтобы дачники приземлялись как можно ближе к своим прямоугольным участкам. Пилоту интересно знать: сколько дачников приземлится на свои участки? Помогите ему решить эту задачу!

Входные данные
В первой строке входного файла INPUT.TXT записано натуральное число N (1 ≤ N ≤ 1000) – количество дачников, далее идут N строк, в каждой из которых описаны координаты каждого дачника и его участка:
X Y X1 Y1 X2 Y2 X3 Y3 X4 Y4
где
(X,Y) – координаты приземления парашютиста
(X1, Y1, X2, Y2, X3, Y3, X4,Y4) – координаты прямоугольного участка на плоскости, указанные последовательно.
Все координаты – целые числа, не превышающие 50000 по абсолютной величине
Выходные данные
В выходной файл OUTPUT.TXT нужно вывести количество дачников, приземлившихся на свой участок. Попадание на границу участка считается попаданием на участок.
Пример
INPUT.TXT
OUTPUT.TXT
1
3
6 6 3 6 6 9 8 7 5 4
13 5 9 2 9 8 12 8 12 2
3 2 2 1 2 3 6 3 6 1
2
Решение
f = open("input.txt","r")
n=int(f.readline())
k=0
def ploch(x,y,x1,y1,x2,y2):
     
    a=((int(x)-int(x1))**2+(int(y)-int(y1))**2)**0.5
    b=((int(x)-int(x2))**2+(int(y)-int(y2))**2)**0.5
    c=((int(x2)-int(x1))**2+(int(y2)-int(y1))**2)**0.5
    p=(a+b+c)/2
    global s
    s=(p*(p-a)*(p-b)*(p-c))**0.5
 
for i in range(n):
    x,y,x1,y1,x2,y2,x3,y3,x4,y4=f.readline().split()
    ploch(x,y,x1,y1,x2,y2)
    s1=s
    ploch(x,y,x3,y3,x2,y2)
    s2=s
    ploch(x,y,x3,y3,x4,y4)
    s3=s  
    ploch(x,y,x1,y1,x4,y4)
    s4=s 
    ploch(x1,y1,x2,y2,x4,y4)
    ss1=s 
    ploch(x3,y3,x2,y2,x4,y4)
    ss2=s
    if ((s1+s2+s3+s4)-(ss1+ss2))<0.00001:
        k+=1
 
f.close()
f1 = open("output.txt","w")
sss=str(k)
f1.write(sss)
f1.close()

Комментариев нет:

Отправить комментарий