結果

問題 No.2628 Shrinkage
ユーザー miya145592miya145592
提出日時 2024-02-16 23:12:19
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,656 bytes
コンパイル時間 352 ms
コンパイル使用メモリ 82,572 KB
実行使用メモリ 89,544 KB
最終ジャッジ日時 2024-09-28 21:51:37
合計ジャッジ時間 5,452 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 136 ms
88,720 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

from fractions import Fraction

# 線分ABと線分CDの交点を求める関数
def _calc_cross_point(pointA, pointB, pointC, pointD):
    cross_point = (0,0)
    bunbo = (pointB[0] - pointA[0]) * (pointD[1] - pointC[1]) - (pointB[1] - pointA[1]) * (pointD[0] - pointC[0])
    bunbo = Fraction(bunbo)

    # 直線が平行な場合
    if (bunbo == 0):
        return False, cross_point

    vectorAC = ((pointC[0] - pointA[0]), (pointC[1] - pointA[1]))
    r = ((pointD[1] - pointC[1]) * vectorAC[0] - (pointD[0] - pointC[0]) * vectorAC[1]) / bunbo
    s = ((pointB[1] - pointA[1]) * vectorAC[0] - (pointB[0] - pointA[0]) * vectorAC[1]) / bunbo

    # rを使った計算の場合
    distance = ((pointB[0] - pointA[0]) * r, (pointB[1] - pointA[1]) * r)
    #cross_point = (int(pointA[0] + distance[0]), int(pointA[1] + distance[1]))
    cross_point = (pointA[0] + distance[0], pointA[1] + distance[1])

    # sを使った計算の場合
    # distance = ((pointD[0] - pointC[0]) * s, (pointD[1] - pointC[1]) * s)
    # cross_point = (int(pointC[0] + distance[0]), int(pointC[1] + distance[1]))

    return True, cross_point

import sys
input = sys.stdin.readline
T = int(input())
XY = [list(map(int, input().split())) for _ in range(T)]
for x1, y1, x2, y2, X1, Y1, X2, Y2 in XY:
    ret, cp = _calc_cross_point((x1, y1), (X1, Y1), (x2, y2), (X2, Y2))
    #print(ret, cp)
    if ret==False:
        print("No")
        continue
    cx, cy = cp
    p1c = (x1-cx)**2+(y1-cy)**2
    p2c = (x2-cx)**2+(y2-cy)**2
    p1q1 = (X1-x1)**2+(Y1-y1)**2
    p2q2 = (X2-x2)**2+(Y2-y2)**2
    if p1c*p2q2==p2c*p1q1:
        print("Yes")
    else:
        print("No")
0