Submission #732969

#TimeUsernameProblemLanguageResultExecution timeMemory
732969williampsunMobile (BOI12_mobile)Java
8 / 100
1077 ms131072 KiB
import java.io.*; import java.util.*; public class mobile { static int N; static int L; static int[][] 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 int[N][2]; for(int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); coordinates[i][0] = Integer.parseInt(st.nextToken()); coordinates[i][1] = Integer.parseInt(st.nextToken()); } double left = 0; double right = 1500000000; double answer = 0; do { 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<>(); for(int[] c : coordinates) { int h = c[0]; int k = c[1]; double discriminant = radius * radius - k * k; if(discriminant > 0) { double sqrt = Math.sqrt(discriminant); intercepts.add(new Intercept(sqrt + h, 1)); intercepts.add(new Intercept(-sqrt + h, 2)); } else if (discriminant == 0) { intercepts.add(new Intercept(h, 0)); } } if(intercepts.size() == 0) { return true; } 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 false; } static class Intercept { double x; int type; public Intercept(double x, int t) { this.x = x; type = t; } } 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...