結果
| 問題 |
No.2628 Shrinkage
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-02-16 23:05:55 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,558 bytes |
| コンパイル時間 | 204 ms |
| コンパイル使用メモリ | 82,352 KB |
| 実行使用メモリ | 89,300 KB |
| 最終ジャッジ日時 | 2024-09-28 21:40:50 |
| 合計ジャッジ時間 | 4,796 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 27 |
ソースコード
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])
# 直線が平行な場合
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]))
# 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")