結果

問題 No.2628 Shrinkage
ユーザー tipstar0125tipstar0125
提出日時 2024-02-16 22:01:20
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,398 bytes
コンパイル時間 224 ms
コンパイル使用メモリ 82,504 KB
実行使用メモリ 68,384 KB
最終ジャッジ日時 2024-09-28 20:18:26
合計ジャッジ時間 2,098 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 33 ms
53,304 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 RE -
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 RE -
testcase_13 RE -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 RE -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

def gcd(a,b):
    while b!=0:
        r=a%b
        a,b=b,r
    return abs(a)

def max_min_cross(p1, p2, p3, p4):
    min_ab, max_ab = min(p1, p2), max(p1, p2)
    min_cd, max_cd = min(p3, p4), max(p3, p4)

    if min_ab > max_cd or max_ab < min_cd:
        return False

    return True

def cross_judge(a, b, c, d):
    # x座標による判定
    if not max_min_cross(a[0], b[0], c[0], d[0]):
        return False

    # y座標による判定
    if not max_min_cross(a[1], b[1], c[1], d[1]):
        return False

    tc1 = (a[0] - b[0]) * (c[1] - a[1]) + (a[1] - b[1]) * (a[0] - c[0])
    tc2 = (a[0] - b[0]) * (d[1] - a[1]) + (a[1] - b[1]) * (a[0] - d[0])
    td1 = (c[0] - d[0]) * (a[1] - c[1]) + (c[1] - d[1]) * (c[0] - a[0])
    td2 = (c[0] - d[0]) * (b[1] - c[1]) + (c[1] - d[1]) * (c[0] - b[0])
    return tc1 * tc2 <= 0 and td1 * td2 <= 0

T=int(input())
for _ in range(T):
    x1,y1,x2,y2,X1,Y1,X2,Y2=list(map(int,input().split()))
    if cross_judge([x1,y1],[X1,Y1],[x2,y2],[X2,Y2]):
        print("No")
        continue

    diff_x1=x1-X1
    diff_y1=y1-Y1
    diff_x2=x2-X2
    diff_y2=y2-Y2
    g1=gcd(diff_x1,diff_y1)
    g2=gcd(diff_x2,diff_y2)

    diff_x1//=g1
    diff_y1//=g1
    diff_x2//=g2
    diff_y2//=g2
    
    if diff_x1==-diff_x2 and diff_y1==diff_y2:print("Yes")
    elif diff_x1==diff_x2 and diff_y1==-diff_y2:print("Yes")
    else:print("No")
        
        
0