AcWing 2550. 轨道炮
原题链接
中等
作者:
x_x_5
,
2024-05-01 17:24:16
,
所有人可见
,
阅读 4
import java.util.*;
class Point {
int[][] site;
Point(int x, int y) {
this.site = new int[2][2];
this.site[0][0] = x;
this.site[1][0] = y;
}
}
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Point[] points = new Point[n];
for (int i = 0; i < n; ++ i) {
int x = sc.nextInt(), y = sc.nextInt(), v = sc.nextInt();
char d = sc.next().charAt(0);
points[i] = new Point(x, y);
points[i].site[d == 'U' || d == 'D' ? 1 : 0][1] = d == 'U' || d == 'R' ? v : -v;
}
int ans = 0;
for (int i = 0; i < n; ++ i) {
for (int k = 0; k < 2; ++ k) {
Map<Integer, Integer> map = new HashMap<>(); // 键:时间,值:该时间与points[i]在一条线上的点数
for (int j = 0; j < n; ++ j) {
if (points[i].site[k][1] == points[j].site[k][1]) {
if (points[i].site[k][0] == points[j].site[k][0]) {
map.put(-1, map.getOrDefault(-1, 0) + 1);
}
} else if ((points[j].site[k][0] - points[i].site[k][0]) % (points[i].site[k][1] - points[j].site[k][1]) == 0) {
int t = (points[j].site[k][0] - points[i].site[k][0]) / (points[i].site[k][1] - points[j].site[k][1]);
if (t >= 0) map.put(t, map.getOrDefault(t, 0) + 1);
}
}
int a = 0;
for (int key : map.keySet()) {
if (key == -1) continue;
a = Math.max(a, map.get(key));
}
a += map.getOrDefault(-1, 0);
ans = Math.max(ans, a);
}
}
System.out.println(ans);
}
}