結果

問題 No.3710 Universal Tiles
コンテスト
ユーザー ks2m
提出日時 2026-09-11 21:43:45
言語 Java
(openjdk 26.0.2.1 + ACL)
コンパイル:
javac -J-Duser.language=en -encoding UTF8 -cp /opt/aclib/ac_library.jar _filename_
実行:
java -ea -Xmx700m -Xss256M -DONLINE_JUDGE=true -cp .:/opt/aclib/ac_library.jar _class_
結果
AC  
実行時間 464 ms / 2,000 ms
+ 549µs
コード長 1,292 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,422 ms
コンパイル使用メモリ 86,408 KB
実行使用メモリ 49,680 KB
最終ジャッジ日時 2026-09-11 21:43:57
合計ジャッジ時間 8,174 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		char[][][] s = new char[n][m][m];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				s[i][j] = sc.next().toCharArray();
			}
		}
		sc.close();

		int ans = m * m;
		int n2 = n * 2;
		int n22 = 1 << n2;
		for (int i = 0; i < n22; i++) {
			char[][] t = new char[m][m];
			for (int j = 0; j < n; j++) {
				int v1 = i >> j & 1;
				int v2 = i >> (n + j) & 1;
				int v = v1 * 2 + v2;
				char[][] a = s[j];
				for (int k = 0; k < v; k++) {
					a = turnRight(a);
				}
				for (int k = 0; k < m; k++) {
					for (int k2 = 0; k2 < m; k2++) {
						if (a[k][k2] == '#') {
							t[k][k2] = '#';
						}
					}
				}
			}
			int cnt = 0;
			for (int k = 0; k < m; k++) {
				for (int k2 = 0; k2 < m; k2++) {
					if (t[k][k2] == '#') {
						cnt++;
					}
				}
			}
			ans = Math.min(ans, cnt);
		}
		System.out.println(ans);
	}

	static char[][] turnRight(char[][] a) {
		int h = a.length;
		int w = a[0].length;
		int h1 = h - 1;
		char[][] b = new char[w][h];
		for (int i = 0; i < w; i++) {
			for (int j = 0; j < h; j++) {
				b[i][j] = a[h1 - j][i];
			}
		}
		return b;
	}
}
0