結果

問題 No.2602 Real Collider
ユーザー naut3naut3
提出日時 2024-01-12 22:34:05
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,873 bytes
コンパイル時間 375 ms
コンパイル使用メモリ 82,436 KB
実行使用メモリ 81,420 KB
最終ジャッジ日時 2024-09-27 23:14:30
合計ジャッジ時間 45,880 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
53,952 KB
testcase_01 AC 42 ms
53,148 KB
testcase_02 AC 40 ms
53,960 KB
testcase_03 AC 42 ms
55,192 KB
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 AC 560 ms
79,548 KB
testcase_12 AC 697 ms
80,612 KB
testcase_13 AC 234 ms
77,436 KB
testcase_14 WA -
testcase_15 AC 541 ms
79,660 KB
testcase_16 AC 635 ms
79,004 KB
testcase_17 AC 732 ms
79,032 KB
testcase_18 AC 286 ms
77,752 KB
testcase_19 AC 563 ms
79,636 KB
testcase_20 AC 734 ms
79,460 KB
testcase_21 AC 560 ms
80,008 KB
testcase_22 AC 540 ms
79,520 KB
testcase_23 AC 393 ms
78,516 KB
testcase_24 WA -
testcase_25 AC 312 ms
77,636 KB
testcase_26 AC 538 ms
78,736 KB
testcase_27 AC 465 ms
78,008 KB
testcase_28 AC 627 ms
77,980 KB
testcase_29 WA -
testcase_30 WA -
testcase_31 AC 677 ms
79,664 KB
testcase_32 AC 563 ms
78,592 KB
testcase_33 AC 595 ms
78,500 KB
testcase_34 AC 695 ms
79,244 KB
testcase_35 AC 582 ms
79,812 KB
testcase_36 AC 490 ms
78,916 KB
testcase_37 AC 713 ms
79,388 KB
testcase_38 AC 733 ms
80,264 KB
testcase_39 AC 691 ms
79,904 KB
testcase_40 AC 426 ms
78,652 KB
testcase_41 AC 806 ms
80,228 KB
testcase_42 AC 701 ms
79,496 KB
testcase_43 AC 722 ms
80,308 KB
testcase_44 AC 887 ms
80,936 KB
testcase_45 AC 510 ms
78,964 KB
testcase_46 AC 509 ms
78,388 KB
testcase_47 AC 654 ms
78,052 KB
testcase_48 AC 601 ms
78,512 KB
testcase_49 AC 666 ms
79,832 KB
testcase_50 AC 543 ms
80,400 KB
testcase_51 AC 496 ms
79,152 KB
testcase_52 AC 354 ms
77,936 KB
testcase_53 AC 636 ms
79,312 KB
testcase_54 AC 522 ms
77,924 KB
testcase_55 AC 621 ms
80,904 KB
testcase_56 AC 562 ms
78,384 KB
testcase_57 AC 550 ms
79,392 KB
testcase_58 AC 246 ms
77,428 KB
testcase_59 AC 659 ms
78,452 KB
testcase_60 AC 712 ms
80,952 KB
testcase_61 AC 673 ms
81,016 KB
testcase_62 AC 668 ms
78,596 KB
testcase_63 AC 843 ms
81,420 KB
testcase_64 AC 764 ms
79,428 KB
testcase_65 AC 471 ms
79,344 KB
testcase_66 AC 658 ms
78,864 KB
testcase_67 AC 424 ms
77,880 KB
testcase_68 AC 469 ms
79,276 KB
testcase_69 AC 264 ms
77,604 KB
testcase_70 AC 406 ms
78,784 KB
testcase_71 AC 566 ms
81,396 KB
testcase_72 AC 588 ms
79,184 KB
testcase_73 AC 545 ms
78,436 KB
testcase_74 AC 611 ms
78,788 KB
testcase_75 AC 639 ms
78,900 KB
testcase_76 AC 598 ms
78,624 KB
testcase_77 AC 680 ms
81,180 KB
testcase_78 AC 799 ms
80,920 KB
testcase_79 AC 742 ms
80,404 KB
testcase_80 AC 715 ms
79,260 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

from itertools import combinations

eps = 1e-7


def minimum_bounding_circle_4points(p1, p2, p3, p4):
    def dist(q1, q2):
        x1, y1 = q1
        x2, y2 = q2
        return (x1 - x2) ** 2 + (y1 - y2) ** 2

    for q1, q2, q3 in combinations([p1, p2, p3, p4], 3):
        cp, r = minimum_bounding_circle(q1, q2, q3)

        if dist(cp, p1) <= r + eps and dist(cp, p2) <= r + eps and dist(cp, p3) <= r + eps and dist(cp, p4) <= r + eps:
            return cp, r

    return None


def minimum_bounding_circle(p1, p2, p3):
    def dist(q1, q2):
        x1, y1 = q1
        x2, y2 = q2
        return (x1 - x2) ** 2 + (y1 - y2) ** 2

    def add(q1, q2):
        x1, y1 = q1
        x2, y2 = q2
        return (x1 + x2, y1 + y2)

    def mul(a, q1):
        x1, y1 = q1
        return (a * x1, a * y1)

    A = dist(p2, p3)
    B = dist(p3, p1)
    C = dist(p1, p2)

    sa, sb, sc = sorted([A, B, C])

    if sa + sb <= sc + eps:
        c = add(p2, p3) if A == sc else add(p1, p3) if B == sc else add(p1, p2)
        c = mul(1/2, c)
        r2 = sc / 4
    else:
        T = A * (B + C - A)
        U = B * (C + A - B)
        W = C * (A + B - C)

        c = mul(1 / (T + U + W), add(add(mul(T, p1), mul(U, p2)), mul(W, p3)))
        r2 = dist(c, p1)

    return c, r2


def main():
    Q = int(input())
    Xa, Ya, Xb, Yb, Xc, Yc = map(int, input().split())

    (cx, cy), r = minimum_bounding_circle((Xa, Ya), (Xb, Yb), (Xc, Yc))

    def dist(q1, q2):
        x1, y1 = q1
        x2, y2 = q2
        return (x1 - x2) ** 2 + (y1 - y2) ** 2

    for _ in range(Q):
        xq, yq = map(int, input().split())

        (tx, ty), tr = minimum_bounding_circle_4points(
            (Xa, Ya), (Xb, Yb), (Xc, Yc), (xq, yq))

        if dist((tx, ty), (cx, cy)) <= eps and tr - r <= eps:
            print("Yes")
        else:
            print("No")

    return 0


main()
0