提出詳細


ソースコード

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);
	}

}

提出情報

提出時間 2018-11-01 13:24:54
問題 B - ヘッダー解析
ユーザ名 teracoder
状態 形式違反
正解率 N/A
提出出力結果

テストケース情報

# 状態 詳細情報
正解か誤答の場合のみ表示されます.