There is a path, and the two sides can be imagined as Y = 0 and y = 1. Now we will give you a list of radar, where each radar is (x coordinate, Y coordinate, and radiation radius ). Ask if a car can pass this road.
Code statement:
1 static class Radar { 2 double x; 3 double y; 4 double r; 5 public Radar(double x, double y, double r) { 6 this.x = x; 7 this.y = y; 8 this.r = r; 9 }10 }11 12 class Area {13 List<Radar> radars;14 double upperbound;15 double lowerbound;16 17 public Area() {18 radars = new ArrayList<Radar>();19 upperbound = 0;20 lowerbound = 1;21 }22 23 private boolean canMerge(Radar r1, Radar r2) {24 return Math.pow(r1.r + r2.r, 2) >= Math.pow(r1.x - r2.x, 2) + Math.pow(r1.y - r2.y, 2);25 }26 27 private boolean merge(Radar r) {28 for(Radar radar: radars) {29 if(canMerge(r, radar)) {30 upperbound = Math.max(upperbound, r.x + r.r);31 lowerbound = Math.min(lowerbound, r.y - r.r);32 radars.add(r);33 return true;34 }35 }36 return false;37 }38 39 private boolean cannotPass() {40 return upperbound >= 1 && lowerbound <= 0;41 }42 }43 44 45 public boolean canCarPass(List<Radar> radars) {46 List<Area> area = new ArrayList<Area>();47 for(Radar radar: radars) {48 boolean merged = false;49 for(Area a: area) {50 merged = a.merge(radar);51 if(merged) {52 break;53 }54 }55 if(!merged) {56 Area a = new Area();57 a.radars.add(radar);58 area.add(a);59 }60 }61 for(Area a : area) {62 if(a.cannotPass()) {63 return false;64 }65 }66 return true;67 }68 69 public static void main(String[] args) {70 RadarDetect rd = new RadarDetect();71 //List<Radar> radars = Arrays.asList(new Radar(1, 0.5, 0.49), new Radar(3, 1.5, 1), new Radar(3, 0.4, 0.3));72 List<Radar> radars = Arrays.asList(new Radar(1, 0, 1.5), new Radar(3, 1, 1.5));73 System.out.println(rd.canCarPass(radars));74 }
Snapchat-vehicle through radar Area