package test_4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * No.521 Cheeses and a Mousetrap(チーズとネズミ捕り) * ネズミのrくんはNN個の箱が並ぶ場所を見つけました。 * そこには先客のmくんが居て、彼曰く * 「この箱たちの中には全てにたくさんのチーズが入っている。しかし、1つだけネズミ捕り入りの箱が入り、その中に入ると捕られてしまう。」 * そう言ってmくんは箱に駆け出しました。 * しばらくして、ネズミのcくんが、 * 「mが端からKK番目の箱で捕られたぞ」 * と叫びました。 * 彼の情報はほぼ正しいですが、K=0K=0もしくはK>NK>Nのとき、即ちcくんが存在し得ない箱の番号を叫んだとき、彼の情報は誤っています。 * rくんの目的はノーリスクでチーズを食すことで、少しでも捕られる危険性のある箱にはrくんはチーズを食しに向かいません。 * rくんが食せるチーズの最大数を求めてください。 */ public class Question_11_0605 { static final int BOX_MIN = 1; static final int TRAP_MIN = 0; static final int MAX = (int) Math.pow(10, 9); public static void main(String[] args) { InputStreamReader re = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(re); try { String[] input = br.readLine().split(" "); int boxCount = Integer.parseInt(input[0]); int trapNum = Integer.parseInt(input[1]); int result = 0; // 有効値判定 if (NumJudg(boxCount, BOX_MIN, MAX) && NumJudg(trapNum, TRAP_MIN, MAX)) { int trapCount; // ネズミ捕りの情報 if (trapNum == 0 || trapNum > boxCount) { // 正しい情報ではないのでどこにネズミ捕りがどこか分からない状態 trapCount = -1; } else { if ((boxCount % 2 == 1) && (boxCount / 2 + 1 == trapNum)) { // ネズミ捕りは真ん中に存在する trapCount = 1; } else { // ネズミ捕りは両端に存在する trapCount = 2; } } if (trapCount == -1) { result = 0; } else { result = boxCount - trapCount; } System.out.println(result); } else { System.out.println("値が有効範囲外です"); } } catch (NumberFormatException e) { System.out.println("数字を入力して下さい。"); } catch (IOException e) { System.out.println("エラーが発生しました。"); } finally { try { re.close(); br.close(); } catch (IOException e) { System.out.println("InputStreamReader、BufferedReaderクローズ中にエラーが発生しました"); } } } /** * 有効値判定 * @param str 判定する文字列 * @param max 最大値 * @param min 最小値 * @return 範囲内ならtrue,範囲外ならfalseを返す */ private static boolean NumJudg(int input, int min, int max) { Boolean result = false; if (min <= input && input <= max) { result = true; } return result; } }