Submission #732166

#TimeUsernameProblemLanguageResultExecution timeMemory
732166williampsunMobile (BOI12_mobile)Java
25 / 100
1076 ms131072 KiB
import java.io.*; import java.util.*; public class mobile { static int N; static int L; static ArrayList<Coordinate> coordinates; public static void main(String[] args) throws IOException { BufferedReader br; PrintWriter out; StringTokenizer st; try { br = new BufferedReader(new FileReader("highcard.in")); out = new PrintWriter(new BufferedWriter(new FileWriter("highcard.out"))); st = new StringTokenizer(br.readLine()); } catch (Exception e) { br = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(System.out); st = new StringTokenizer(br.readLine()); } N = Integer.parseInt(st.nextToken()); L = Integer.parseInt(st.nextToken()); coordinates = new ArrayList<>(); for(int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); coordinates.add(new Coordinate(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()))); } double left = 0; double right = 1500000000; double answer = 0; do { // System.out.println(left + " " + right); double mid = (left + right) / 2; boolean working = works(mid); if (working) { answer = mid; left = mid; } else { right = mid; } } while (Math.abs(left - right) > 0.0001); out.print(answer); out.close(); } static boolean works(double radius) { ArrayList<Intercept> intercepts = new ArrayList<>(); int id = 0; for(Coordinate c : coordinates) { double[] theseInter = getIntercepts(c.x, c.y, radius); if(theseInter.length == 2) { intercepts.add(new Intercept(Math.min(theseInter[0], theseInter[1]), 1, id)); intercepts.add(new Intercept(Math.max(theseInter[0], theseInter[1]), 2, id)); id++; } else if (theseInter.length == 1) { intercepts.add(new Intercept(theseInter[0], 0, id)); id++; } } intercepts.sort(new Compare()); int numCircles = 0; for (Intercept intercept : intercepts) { if (intercept.x >= 0 && intercept.x <= L) { if(numCircles == 0 || (numCircles == 1 && intercept.type == 2)) { return true; } } if (intercept.type == 1) { numCircles++; } else if (intercept.type == 2) { numCircles--; } } return intercepts.size() == 0; } static double[] getIntercepts(double h, double k, double radius) { if(radius * radius - k * k > 0) { double sqrt = Math.sqrt(radius * radius - k * k); return new double[] {sqrt + h, -sqrt + h}; } else if (radius * radius - k * k == 0) { return new double[] {h}; } else { return new double[] {}; } } static class Coordinate { int x; int y; public Coordinate(int x, int y) { this.x = x; this.y = y; } } static class Intercept { double x; int type; int id; public Intercept(double x, int t, int id) { this.x = x; type = t; this.id = id; } } static class Compare implements Comparator<Intercept> { @Override public int compare(Intercept o1, Intercept o2) { if(o1.x < o2.x) { return -1; } else if (o1.x == o2.x) { return 0; } return 1; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...