結果

問題 No.2602 Real Collider
ユーザー strangerxxx
提出日時 2024-05-01 17:44:43
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 5,859 bytes
コンパイル時間 283 ms
コンパイル使用メモリ 82,304 KB
実行使用メモリ 84,492 KB
最終ジャッジ日時 2024-11-21 23:19:51
合計ジャッジ時間 51,096 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 57 WA * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import math
def resolve():
import sys
input = sys.stdin.readline
MOD = 1000000007
q = int(input())
xa, ya, xb, yb, xc, yc = map(int, input().split())
c = circumcenter2((xa, ya), (xb, yb), (xc, yc))
d = distance(c, (xa, ya))
for _ in range(q):
x, y = map(int, input().split())
print("Yes" if distance(c, (x, y)) <= d else "No")
class Fraction:
def __init__(self, a: int = 0, b: int = 1) -> None:
if isinstance(a, Fraction):
self.a, self.b = a.a, a.b
return
a, b = int(a), int(b)
if b == 0:
raise ZeroDivisionError(f"{a}/{b}")
if b < 0:
a, b = -a, -b
self.a, self.b = a, b
self._reducion()
def _reducion(self):
g = math.gcd(self.a, self.b)
self.a //= g
self.b //= g
def __add__(self, other):
if isinstance(other, Fraction):
g = math.gcd(self.b, other.b)
x = other.b // g * self.a
y = self.b // g * other.a
return Fraction(x + y, self.b // g * other.b)
return Fraction(self.a + other * self.b, self.b)
def __iadd__(self, other):
if isinstance(other, Fraction):
g = math.gcd(self.b, other.b)
self.a *= other.b // g
self.a += self.b // g * other.a
self.b *= other.b // g
else:
self.a += other * self.b
self._reducion()
return self
__radd__ = __add__
def __sub__(self, other):
if isinstance(other, Fraction):
return self.__add__(-other)
return self.__add__(-other)
def __isub__(self, other):
if isinstance(other, Fraction):
return self.__iadd__(-other.a, other.b)
return self.__iadd__(-other)
def __rsub__(self, other):
return -self + other
def __mul__(self, other):
if isinstance(other, Fraction):
return Fraction(self.a * other.a, self.b * other.b)
else:
return Fraction(self.a * other, self.b)
def __imul__(self, other):
if isinstance(other, Fraction):
self.a *= other.a
self.b *= other.b
else:
self.a *= other
self._reducion()
return self
__rmul__ = __mul__
def __floordiv__(self, other):
if isinstance(other, Fraction):
return self.__mul__(other.inverse())
return Fraction(self.a, self.b * other)
def __ifloordiv__(self, other):
if isinstance(other, Fraction):
return self.__imul__(other.inverse())
self.b *= other
self._reducion()
return self
def __rfloordiv__(self, other):
return self.inverse() * other
__truediv__ = __floordiv__
__itruediv__ = __ifloordiv__
__rtruediv__ = __rfloordiv__
def __pow__(self, other):
if isinstance(other, Fraction):
if other.b == 1:
return self.__pow__(other.a)
raise NotImplementedError
return Fraction(self.a**other, self.b**other)
def __ipow__(self, other):
if isinstance(other, Fraction):
if other.b == 1:
return self.__ipow__(other.a)
raise NotImplementedError
self.a **= other
self.b **= other
return self
def __rpow__(self, other):
if self.b != 1:
raise NotImplementedError
return other**self.a
def __floor__(self) -> int:
return self.a // self.b
def __ceil__(self) -> int:
return (self.a + self.b - 1) // self.b
__int__ = __floor__
def __float__(self):
return self.a / self.b
def inverse(self):
if self.a == 0:
raise ZeroDivisionError(f"tring to calcuate inverse of {self.a}/{self.b}")
return Fraction(self.b, self.a)
def __pos__(self):
return Fraction(self.a, self.b)
def __neg__(self):
return Fraction(-self.a, self.b)
def __abs__(self):
return Fraction(abs(self.a), self.b)
def __eq__(self, other) -> bool:
if isinstance(other, Fraction):
return self.a == other.a and self.b == other.b
return self.a == self.b * other
def __gt__(self, other):
if isinstance(other, Fraction):
return self.a * other.b > other.a * self.b
return self.a > self.b * other
def __ge__(self, other):
if isinstance(other, Fraction):
return self.a * other.b >= other.a * self.b
return self.a >= self.b * other
def __lt__(self, other):
if isinstance(other, Fraction):
return self.a * other.b < other.a * self.b
return self.a < self.b * other
def __le__(self, other):
if isinstance(other, Fraction):
return self.a * other.b <= other.a * self.b
return self.a <= self.b * other
def __str__(self) -> str:
return f"{self.a}/{self.b}"
__repr__ = __str__
def __hash__(self) -> int:
return hash(self.__str__())
def distance(pa, pb):
return sum([(i - j) ** 2 for i, j in zip(pa, pb)]) ** 0.5
def circumcenter2(pa, pb, pc):
#
x0 = (
(pa[0] ** 2 + pa[1] ** 2) * (pb[1] - pc[1])
+ (pb[0] ** 2 + pb[1] ** 2) * (pc[1] - pa[1])
+ (pc[0] ** 2 + pc[1] ** 2) * (pa[1] - pb[1])
)
y0 = 2 * ((pb[1] - pc[1]) * (pa[0] - pb[0]) - (pa[1] - pb[1]) * (pb[0] - pc[0]))
x1 = (
(pa[1] ** 2 + pa[0] ** 2) * (pb[0] - pc[0])
+ (pb[1] ** 2 + pb[0] ** 2) * (pc[0] - pa[0])
+ (pc[1] ** 2 + pc[0] ** 2) * (pa[0] - pb[0])
)
y1 = 2 * ((pb[0] - pc[0]) * (pa[1] - pb[1]) - (pa[0] - pb[0]) * (pb[1] - pc[1]))
return (
Fraction(x0, y0) if y0 else 0,
Fraction(x1, y1) if y1 else 0,
)
if __name__ == "__main__":
resolve()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0