제출 #731430

#제출 시각아이디문제언어결과실행 시간메모리
731430williampsunMobile (BOI12_mobile)Java
컴파일 에러
0 ms0 KiB
import java.io.*; import java.util.*; public class main2 { 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 = Double.MAX_VALUE; double answer = 0; while(true) { double mid = (left + right) / 2; boolean working = works(mid); if(working) { answer = mid; left = mid; } else { right = mid; } if(isEqual(left, right)) { break; } } 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 && numCircles == 0) { return true; } if (intercept.type == 1) { numCircles++; } else if (intercept.type == 2) { numCircles--; } } return false; } static double[] getIntercepts(double k, double h, double radius) { if(radius * radius - h * h > 0) { double sqrt = Math.sqrt(radius * radius - h * h); return new double[] {sqrt + k, -sqrt + k}; } else if (radius * radius - h * h == 0) { return new double[] {k}; } else { return new double[] {}; } } static boolean isEqual(double one, double two) { return Math.abs(one - two) <= 0.001; } 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; } } }

컴파일 시 표준 에러 (stderr) 메시지

mobile.java:4: error: class main2 is public, should be declared in a file named main2.java
public class main2 {
       ^
1 error