Cod sursa(job #2609499)

Utilizator DeliaGhergheGherghe Ioana-Delia DeliaGherghe Data 2 mai 2020 19:31:19
Problema Trapez Scor 30
Compilator py Status done
Runda Arhiva de probleme Marime 1.42 kb
def cmmdc(a, b):
    a = abs(a)
    b = abs(b)
    while b != 0:
        r = a % b
        a = b
        b = r
    return a

f = open("trapez.in")
n = int(f.readline())
puncte = []
for i in range(n):
    l = f.readline().split()
    puncte.append((int(l[0]),int(l[1])))
f.close()

pante = []

for i in range(len(puncte)):
    for j in range(i + 1, len(puncte)):
        dx = puncte[j][0] - puncte[i][0]
        dy = puncte[j][1] - puncte[i][1]
        if dy == 0:
            pante.append((dy, dx))
        elif dx == 0:
            pante.append((float("inf"), dx))
        else:
            c = cmmdc(dx, dy)
            dx = dx // c
            dy = dy // c
            if dx < 0:
                dx = -dx
                dy = -dy
            pante.append((dy, dx))

pante.sort()

rez = 0
for i in range(len(pante)):
    nr = 1
    if pante[i][0] == 0:
        while i + 1 < len(pante) and pante[i + 1][0] == 0:
            nr = nr + 1
            i = i + 1
        rez += (nr * (nr - 1)) // 2
    elif pante[i][0] == float("inf"):
        while i + 1 < len(pante) and pante[i + 1][0] == float("inf"):
            nr = nr + 1
            i = i + 1
        rez += (nr * (nr - 1)) // 2
    else:
        while i + 1 < len(pante) and pante[i + 1] == pante [i]:
            nr = nr + 1
            i = i + 1
        rez += (nr * (nr - 1)) //2

f = open("trapez.out","w")
f.write(str(rez))
f.close()