codeforces 165B Burning Midnight Oil

897 단어 algorithms
주의해야 할 것은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));
	}

}

좋은 웹페이지 즐겨찾기