题目描述
在一个nn的网格图上有m个探测器,第i个探测器位于(xi,yi)位置,探测半径为ri。
求出nn个点中有多少个是安全的点,即未被探测的点。
输入格式
第一行为两个整数n,m(1<=n<=100,1<=m<=n*n)
接下来m行每行3个整数表示xi,yi,ri(1<=xi,yi,ri<=n)
输出格式
输出一个整数表示答案
输入样例
输出样例
分析:
每得到一个点,就遍历所有二维矩阵,判断二维矩阵中对应的点与探测点核心距离是否小于探测距离
利用isVisited数组判断是否访问过,防止重复计数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import java.util.Scanner; public class Main { public static double distance(int x1, int y1, int x2, int y2) { return Math.hypot((x1 - x2), (y1 - y2)); } public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int m = input.nextInt(); boolean[][] data = new boolean[n + 1][n + 1]; for(int i = 0; i < n + 1; i++) { for(int j = 0; j < n + 1; j++) data[i][j] = true; } int totalNum = n * n; for(int i = 0; i < m; i++) { int xi = input.nextInt(); int yi = input.nextInt(); int ri = input.nextInt(); for(int otherX = 1; otherX <= n; otherX++) { for(int otherY = 1; otherY <= n; otherY++) { double dis = distance(xi, yi, otherX, otherY); if(dis <= (double)ri && data[otherX][otherY] == true) { data[otherX][otherY] = false; totalNum--; } } } } System.out.println(totalNum); input.close(); } }
|