[AtCoder] AtCoder Beginner Contest 010 C - 浮気調査
二点間の距離に関する問題
二次元の座標が整数で与えられているので、座標は格子点となります。
説明にある通り、二点間の距離は平方根を使う必要がありますが、評価する式を二乗することで平方根をなくすことができます。
平方根がなければ、小数点を気にしなくて良いというメリットがありますが、桁が大きくなってしまいます。
コード
import java.util.Scanner; public class ProblemC { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int x1 = scan.nextInt(); int y1 = scan.nextInt(); int x2 = scan.nextInt(); int y2 = scan.nextInt(); int T = scan.nextInt(); int V = scan.nextInt(); int n = scan.nextInt(); int L = V * T; boolean flag = false; for(int i = 0; i < n; i++) { int x = scan.nextInt(); int y = scan.nextInt(); long l1 = dist(x1, x, y1, y); long l2 = dist(x2, x, y2, y); long k = L * L - l1 - l2; if(4 * l1 * l2 <= k * k) { flag = true; } } scan.close(); if(flag) { System.out.println("YES"); }else { System.out.println("NO"); } } public static long dist(int x1, int x2, int y1, int y2) { long l = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); return l; } }