codeforces 165B Burning Midnight Oil

要注意的就是mid是取(lo + hi) / 2的整数部分,所以在赋值hi=mid的时候不是标准的mid-1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

public class CF165B {

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String[] nk = in.readLine().split(" ");
		int n = Integer.parseInt(nk[0]);
		int k = Integer.parseInt(nk[1]);
		int lo = 1, hi = n;
		while (lo != hi) {
			int mid = (lo + hi) / 2;
			int x = mid;
			int sum = 0;
			while (x != 0) {
				sum += x;
				x /= k;
			}
			if (sum > n) {
				hi = mid;
			} else if (sum < n) {
				lo = mid + 1;
			} else {
				lo = mid;
				break;
			}
		}
		DecimalFormat decimalFormat = new DecimalFormat("#");
		System.out.println(decimalFormat.format(lo));
	}

}


你可能感兴趣的:(algorithms)