제출 #998506

#제출 시각아이디문제언어결과실행 시간메모리
998506sushikidMobile (BOI12_mobile)Java
95 / 100
1086 ms74120 KiB
import java.util.*;
import java.io.*;

public class mobile {
    private static double[][] info;
    private static int l;

    private static boolean check(double rad){
        double max = 0;

        for (int i = 0; i < info.length; i++) {
            double[] intersect = intersect(info[i], rad);
            if(intersect[0] <= max){
                max = Math.max(max, intersect[1]);
            }
        }
        return max >= l;
    }
    private static double[] intersect(double[] point, double rad){
        double change = Math.sqrt(rad * rad - point[1] * point[1]);
        return new double[]{point[0] - change, point[0] + change};
    }
    public static void main(String[] args) throws IOException{
        FastIO io = new FastIO();

        int n = io.nextInt(); l = io.nextInt();

        info = new double[n][2];

        for (int i = 0; i < n; i++) {
            info[i][0] = io.nextInt(); info[i][1] = io.nextInt();
        }

        double left = 0; double right = l;
        for (int i = 0; i < 100; i++) {
            double mid = left + (right - left)/2;
            if(check(mid)){
                right = mid;
            }
            else{
                left = mid;
            }
        }
        io.println(left);
        io.close();
    }
}

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;
	}

	// file input
	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++];
	}

	// to read in entire lines, replace c <= ' '
	// with a function that checks whether c is a line break
	public String next() {
		int c;
		do { c = nextByte(); } while (c <= ' ');

		StringBuilder res = new StringBuilder();
		do {
			res.appendCodePoint(c);
			c = nextByte();
		} while (c > ' ');
		return res.toString();
	}

	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;
	}

	public double nextDouble() { return Double.parseDouble(next()); }
}
#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...