• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
不会投篮的邢
投篮三不沾
博客园    首页    新随笔    联系   管理    订阅  订阅

算法训练 小生物的逃逸

问题描述
  空间中有n个球,这些球不相交也不相切。有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但不会在球面上。问这些生物从原来的地方逃逸到所有球外面的空间,至少要经过多少层球面。
输入格式
  第一行两个数n、m:表示球的数量和小生物的数量;
  接下来n行每行四个整数Xi、Yi、Zi和Ri:表示一个球的三维坐标和半径;
  接下来m行每行三个整数Xi、Yi、Zi:表示一个生物的坐标。
输出格式
  一行m个数:表示每个小生物逃逸时至少经过的球面数。
样例输入
2 2
0 0 0 2
0 0 0 4
0 0 1
0 0 3
样例输出
2 1
数据规模和约定
  1<=n、m<=100,|Xi|、|Yi|、|Zi|<=10000,1<=Ri<=10000;
  数据保证所有球严格不接触,小生物都不在球面上。
 
 
主要求圆心与圆心之间的距离和圆的半径比较大小
/**
 * 
 */
package com.xingbing.lanqiao;

import java.util.Scanner;

/**
 * @author 
 * @data
 * @description
 */
public class 小动物的逃逸 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();//表示球的数量
		int m = in.nextInt();//表示小动物的数量
		int a[][] = new int[n][4];//用来保存球的坐标和半径
		int b[][] = new int[m][3];//用来保存小动物的坐标
		for(int i=0;i<n;i++){
			for(int j=0;j<4;j++){
				a[i][j] = in.nextInt();
			}
		}
		for(int i=0;i<m;i++){
			for(int j=0;j<3;j++){
				b[i][j] = in.nextInt();
			}
		}
		int count = 0;
		for(int i=0;i<m;i++){
			count=0;
			for(int j=0;j<n;j++){
				double r = (Math.pow(a[j][0]-b[i][0], 2)+Math.pow(a[j][1]-b[i][1], 2)+Math.pow(a[j][2]-b[i][2], 2));
				if(r<Math.pow(a[j][3], 2)){
					count++;
				}
			}
			System.out.print(count+" ");
		}
	}
}

  

posted @ 2020-04-12 16:02  不会投篮的邢  阅读(213)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3