結果
問題 | No.2602 Real Collider |
ユーザー |
![]() |
提出日時 | 2024-01-12 22:34:55 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 398 ms / 2,000 ms |
コード長 | 1,754 bytes |
コンパイル時間 | 2,051 ms |
コンパイル使用メモリ | 193,320 KB |
最終ジャッジ日時 | 2025-02-18 18:41:06 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 78 |
ソースコード
#include <bits/stdc++.h>using namespace std;struct point{long long x, y;point(){}point(long long x, long long y): x(x), y(y){}point operator -(point P){return point(x - P.x, y - P.y);}point operator *(long long k){return point(x * k, y * k);}};istream& operator >>(istream& is, point &P){is >> P.x >> P.y;return is;}long long norm_sq(point P){return P.x * P.x + P.y * P.y;}long long dot(point P, point Q){return P.x * Q.x + P.y * Q.y;}int main(){int Q;cin >> Q;point A, B, C;cin >> A >> B >> C;char c = '.';if (dot(B - A, C - A) < 0){c = 'A';}if (dot(C - B, A - B) < 0){c = 'B';}if (dot(A - C, B - C) < 0){c = 'C';}point P1, P2;long long mul;if (c != '.'){if (c == 'B'){swap(A, B);}if (c == 'C'){swap(A, C);}P1.x = B.x + C.x;P1.y = B.y + C.y;P2.x = B.x * 2;P2.y = B.y * 2;mul = 2;} else {long long X_num = norm_sq(A) * (B.y - C.y) + norm_sq(B) * (C.y - A.y) + norm_sq(C) * (A.y - B.y);long long Y_num = -(norm_sq(A) * (B.x - C.x) + norm_sq(B) * (C.x - A.x) + norm_sq(C) * (A.x - B.x));long long den = ((A.x - B.x) * (B.y - C.y) - (B.x - C.x) * (A.y - B.y)) * 2;P1.x = X_num;P1.y = Y_num;P2.x = A.x * den;P2.y = A.y * den;mul = den;}for (int i = 0; i < Q; i++){long long X, Y;cin >> X >> Y;X *= mul;Y *= mul;__int128_t d = (__int128_t) (X - P1.x) * (X - P1.x) + (__int128_t) (Y - P1.y) * (Y - P1.y);__int128_t r = (__int128_t) (P2.x - P1.x) * (P2.x - P1.x) + (__int128_t) (P2.y - P1.y) * (P2.y - P1.y);if (d <= r){cout << "Yes" << endl;} else {cout << "No" << endl;}}}