Submission #1067958

#TimeUsernameProblemLanguageResultExecution timeMemory
1067958Oz121Mobile (BOI12_mobile)Java
0 / 100
1049 ms131072 KiB
import java.io.*; import java.util.*; public class mobile { public static int num; public static double[][] arr; public static void main(String[] args) throws IOException { FastIO io = new FastIO(); num = io.nextInt(); int L = io.nextInt(); arr = new double[num][2]; for (int i = 0;i<num;i++) { arr[i][0] = io.nextInt(); arr[i][1] = io.nextInt(); } double l = 0; double h = Math.pow(10,9); while (h-l>Math.pow(10,-3)) { double mid = (l+h)/2; boolean work = true; ArrayList<Pair> endpoints = getEndpoints(mid); if (endpoints.isEmpty()) {l = mid; continue;} double right = endpoints.get(0).r; for (int i = 1;i<endpoints.size();i++) { //If [endpoints.get(0).l,right] and [endpoints.get(i).l,endpoints.get(i).r] overlap, take union double newL = endpoints.get(i).l; if (newL<=right) right = Math.max(right,endpoints.get(i).r); } work = endpoints.get(0).l<=0&&right>=L; if (work) h = mid; else l = mid; } io.println((l+h)/2); io.close(); } public static ArrayList<Pair> getEndpoints (double r) { ArrayList<Pair> endpoints = new ArrayList<>(); for (int i = 0;i<num;i++) { if (r*r-arr[i][1]*arr[i][1]<0) continue; endpoints.add(new Pair(arr[i][0]-Math.sqrt(r*r-arr[i][1]*arr[i][1]), arr[i][0]+Math.sqrt(r*r-arr[i][1]*arr[i][1]))); } return endpoints; } public static class Pair { double l; double r; public Pair (double l, double r) { this.l = l; this.r = r; } } public static class FastIO extends PrintWriter { private InputStream stream; private byte[] buf = new byte[1 << 16]; private int curChar; private int numChars; // standard input public FastIO() { this(System.in, System.out); } public FastIO(InputStream i, OutputStream o) { super(o); stream = i; } public FastIO(String i, String o) throws IOException { super(new FileWriter(o)); stream = new FileInputStream(i); } // throws InputMismatchException() if previously detected end of file private int nextByte() { if (numChars == -1) { throw new InputMismatchException(); } if (curChar >= numChars) { curChar = 0; try { numChars = stream.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (numChars == -1) { return -1; // end of file } } return buf[curChar++]; } public int nextInt() { // nextLong() would be implemented similarly int c; do { c = nextByte(); } while (c <= ' '); int sgn = 1; if (c == '-') { sgn = -1; c = nextByte(); } int res = 0; do { if (c < '0' || c > '9') { throw new InputMismatchException(); } res = 10 * res + c - '0'; c = nextByte(); } while (c > ' '); return res * sgn; } } }
#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...