結果
問題 |
No.2094 Symmetry
|
ユーザー |
|
提出日時 | 2025-09-27 01:53:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,006 ms / 2,000 ms |
コード長 | 1,572 bytes |
コンパイル時間 | 891 ms |
コンパイル使用メモリ | 82,592 KB |
実行使用メモリ | 123,080 KB |
最終ジャッジ日時 | 2025-09-27 01:53:49 |
合計ジャッジ時間 | 23,548 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
# https://yukicoder.me/problems/no/2094 def main(): N, K = map(int, input().split()) S = [] for _ in range(2 * N): S.append(input()) C = [] for _ in range(2 * N): C.append(list(map(int, input().split()))) # 黒の数を足し合わせる black_num = 0 for i in range(2 * N): for j in range(2 * N): if S[i][j] == "#": black_num += 1 # 何も考えずに最適化する array = [] for i in range(2 * N): for j in range(2 * N): array.append((C[i][j], i, j)) array.sort(reverse=True) answer = 0 cells = [[False] * (2 * N ) for _ in range(2 * N)] for index in range(black_num): c, i, j = array[index] answer += c cells[i][j] = True is_symmetry = True for i in range(2 * N): for j in range(N): if cells[i][j] != cells[i][2 * N - 1 - j]: is_symmetry = False break if is_symmetry: answer += K # あらかじめ対称性を狙っていく if black_num % 2 == 0: black_pair_num = black_num // 2 array = [] for i in range(2 * N): for j in range(N): c1 = C[i][j] c2 = C[i][2 * N - 1 - j] array.append(c1 + c2) array.sort(reverse=True) ans = K for i in range(black_pair_num): ans += array[i] answer = max(ans, answer) print(answer) if __name__ == "__main__": main()