結果
| 問題 |
No.521 Cheeses and a Mousetrap(チーズとネズミ捕り)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-06-05 12:53:04 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 54 ms / 2,000 ms |
| コード長 | 3,102 bytes |
| コンパイル時間 | 3,184 ms |
| コンパイル使用メモリ | 77,764 KB |
| 実行使用メモリ | 50,396 KB |
| 最終ジャッジ日時 | 2024-09-22 06:48:33 |
| 合計ジャッジ時間 | 5,487 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 |
ソースコード
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;
}
}