提出詳細
ソースコード
import java.util.Scanner;
public class Main {
Scanner scanner;
int tc;
public Main() {
scanner = new Scanner(System.in);
}
public void run() {
tc = Integer.parseInt(scanner.nextLine());
for (int i = 0; i < tc; i++) {
int[][] map = makeMap(); // 2次元配列マップ生成
putData(map); // データを読み込んでマップに代入
int value = calcMaxValue(map); // 集金できる最大合計値を計算
System.out.println("Case #"+i+":");
outResult(value); // 出力
}
}
public static void main(String[] args) {
Main jadger = new Main();
jadger.run();
}
private int[][] makeMap() {
String[] sizeArray = scanner.nextLine().split(" ");
int width = Integer.parseInt(sizeArray[0]);
int height = Integer.parseInt(sizeArray[1]);
return new int[height][width];
}
private void putData(int[][] map) {
for (int y = 0; y < map.length; y++) {
String[] datas = scanner.nextLine().split(" ");
for (int i = 0; i < datas.length; i++) {
map[y][i] = Integer.parseInt(datas[i]);
}
}
}
private int calcMaxValue(int[][] map) {
int value = 0;
int maxH = map.length;
int maxW = map[0].length;
for (int y = 0; y < maxH; y++) {
for (int x = 0; x < maxW; x++) {
for (int wayY = -1; wayY <= 1; wayY++) {
for (int wayX = -1; wayX <= 1; wayX++) {
value = Math.max(value, calcSumValue(map, x, y, wayX, wayY));
}
}
}
}
return value;
}
private int calcSumValue(int[][] map, int x, int y, int wayX, int wayY) {
int value = 0;
boolean noMove = wayX == 0 && wayY == 0;
if (noMove)
return -1;
for (int i = 0; i < 4; i++) {
int destX = (x + wayX * i);
int destY = (y + wayY * i);
boolean outOfRange = destX < 0 || destX > map[0].length - 1 || destY < 0 || destY > map.length - 1;
if (outOfRange)
break;
value += map[destY][destX];
}
return value;
}
private void outResult(int value) {
System.out.println(value);
}
}
提出情報
提出出力結果
テストケース情報
# |
状態 |
詳細情報 |
正解か誤答の場合のみ表示されます. |