Submission #1893600


Source Code Expand

from functools import reduce


def cross(a, b):
    return a.real * b.imag - a.imag * b.real


def graham_scan(points):
    points.sort(key=lambda p: (p.real, p.imag))
    lh = reduce(keep_left, points, [])
    uh = reduce(keep_left, reversed(points), [])
    lh.extend(uh[1:-1])
    return lh


def keep_left(hull, r):
    if hull:
        prev = hull.pop()
        while hull:
            p = hull[-1]
            if cross(prev - p, r - p) >= 0:
                hull.append(prev)
                break
            prev = hull.pop()
        else:
            hull.append(prev)
    if not hull or hull[-1] != r:
        hull.append(r)
    return hull


def diameter(convex):
    n = len(convex)
    convex.append(convex[0])
    mi = min(range(n), key=lambda i: convex[i].imag)
    mj = max(range(n), key=lambda i: convex[i].imag)
    md = abs(convex[mi] - convex[mj])
    i, j = mi, mj
    while True:
        if cross(convex[i + 1] - convex[i], convex[j + 1] - convex[j]) >= 0:
            j = (j + 1) % n
        else:
            i = (i + 1) % n
        md = max(md, abs(convex[i] - convex[j]))
        if i == mi and j == mj:
            break
    return md


n = int(input())
points = [complex(*map(int, input().split())) for _ in range(n)]
if n > 2:
    convex = graham_scan(points)
else:
    convex = points
print(diameter(convex))

Submission Info

Submission Time
Task A - 2点間距離の最大値 ( The longest distance )
User ikatakos
Language Python (3.4.3)
Score 100
Code Size 1395 Byte
Status AC
Exec Time 30 ms
Memory 3828 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 26
Set Name Test Cases
All 00_max.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt
Case Name Status Exec Time Memory
00_max.txt AC 30 ms 3828 KB
00_sample_01.txt AC 23 ms 3572 KB
00_sample_02.txt AC 23 ms 3572 KB
00_sample_03.txt AC 23 ms 3572 KB
00_sample_04.txt AC 23 ms 3572 KB
00_sample_05.txt AC 23 ms 3572 KB
01_rnd_00.txt AC 23 ms 3572 KB
01_rnd_01.txt AC 23 ms 3572 KB
01_rnd_02.txt AC 23 ms 3572 KB
01_rnd_03.txt AC 24 ms 3572 KB
01_rnd_04.txt AC 23 ms 3572 KB
01_rnd_05.txt AC 23 ms 3572 KB
01_rnd_06.txt AC 23 ms 3572 KB
01_rnd_07.txt AC 23 ms 3572 KB
01_rnd_08.txt AC 23 ms 3572 KB
01_rnd_09.txt AC 23 ms 3572 KB
01_rnd_10.txt AC 23 ms 3572 KB
01_rnd_11.txt AC 23 ms 3572 KB
01_rnd_12.txt AC 23 ms 3572 KB
01_rnd_13.txt AC 23 ms 3572 KB
01_rnd_14.txt AC 23 ms 3572 KB
01_rnd_15.txt AC 23 ms 3572 KB
01_rnd_16.txt AC 23 ms 3572 KB
01_rnd_17.txt AC 23 ms 3572 KB
01_rnd_18.txt AC 23 ms 3572 KB
01_rnd_19.txt AC 23 ms 3572 KB