最小安装雷达数量
题目:海岸线一条无线长的直线,一边是陆地,一边是海洋,在海洋中有小岛,需要雷达监测,需要最少雷达数。
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class Radar_Installation { static class Radar{ double l; double r; public Radar(double l, double r){ this.l = l; this.r = r; } } public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt();//小岛数量 int d = sc.nextInt();//雷达监测半径 int x , y; double l, r; int count = 1; ArrayList<Radar> list = new ArrayList<Radar>(); for(int i=0; i<n; i++){ x = sc.nextInt(); y = sc.nextInt(); l = x - Math.sqrt((d*d - y * y));//计算雷达最小x r = x + Math.sqrt((d*d - y * y));//计算雷达最大x list.add(new Radar(l, r)); } Collections.sort(list, new Sort());//按最有边界进行排序 Radar radar = list.get(0); for(int i=1; i<list.size(); i++ ){ if(list.get(i).l > radar.r){//当第下一个雷达的左边界大于上一个雷达的右边界则,需再增加一个雷达 count++; radar = list.get(i); }else if(list.get(i).r < radar.r){//当下一个雷达的右边界小于当前雷达的右边界需要更新。 radar = list.get(i); } } System.out.println(count); sc.close(); } //对arraylist进行排序 static class Sort implements Comparator<Radar>{ @Override public int compare(Radar o1, Radar o2) { return o1.r == o2.r ? 0 : o1.r > o2.r ? 1 : -1; } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步