結果
問題 | No.217 魔方陣を作ろう |
ユーザー |
![]() |
提出日時 | 2020-12-24 01:26:28 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,848 bytes |
コンパイル時間 | 2,033 ms |
コンパイル使用メモリ | 200,444 KB |
最終ジャッジ日時 | 2025-01-17 06:35:19 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 WA * 13 |
ソースコード
#include <bits/stdc++.h> using namespace std; vector<vector<int>> solve(int N) { vector<vector<int>> magic(N, vector<int>(N)); if (N & 1) { int i = 0, j = N / 2, num = 1; while (num <= N * N) { magic[i][j] = num++; (i += 1) %= N; (j += 1) %= N; if (magic[i][j]) (j += N - 1) %= N; } } else if (N % 4 == 0) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { magic[i][j] = i * N + j + 1; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N / 2; j++) { if (i % 4 == j % 4 || i % 4 == 3 - (j % 4)) swap(magic[i][j], magic[N - 1 - i][N - 1 - j]); } } } else { auto origin = solve(N / 2); for (auto& V : origin) for (auto& x : V) (x -= 1) *= 4; int LUX[3][2][2] = {{{4, 1}, {2, 3}}, {{1, 4}, {2, 3}}, {{1, 4}, {3, 2}}}; auto lux = [](int N, int i, int j) { if (i > N / 2 + 1) return 2; if ((i == N / 2 && j == N / 2) || (i == N / 2 + 1) && j != N / 2) return 1; return 0; }; for (int i = 0; i < N / 2; i++) { for (int j = 0; j < N / 2; j++) { for (int k = 0; k < 2; k++) { for (int l = 0; l < 2; l++) { magic[i * 2 + k][j * 2 + l] = origin[i][j] + LUX[lux(N / 2, i, j)][k][l]; } } } } } return magic; } int main() { int N; cin >> N; auto magic = solve(N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << magic[i][j] << " "; } cout << endl; } }