結果
| 問題 |
No.217 魔方陣を作ろう
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-05-26 23:20:12 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,835 bytes |
| コンパイル時間 | 834 ms |
| コンパイル使用メモリ | 68,024 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-06 10:25:54 |
| 合計ジャッジ時間 | 1,234 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 WA * 16 |
ソースコード
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>
#include <string>
using namespace std;
typedef vector<int> VI;
typedef vector< VI > VVI;
int n, n2;
VVI ms;
void show(int n, VVI &vec) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%3d", vec[i][j]);
}
printf("\n");
}
}
VVI makeOddMS(int len) {
VVI magic(n, VI(n, 0));
int x = len / 2;
int y = 0;
int len2 = len * len;
for (int i = 1; i <= len2 ; i++) {
magic[y][x] = i;
x = (x - 1 + len) % len;
y = (y + 1) % len;
if (y == 0) {
x = (x + 1) % len;
}
}
return magic;
}
int main() {
cin >> n;
n2 = n * n;
ms.assign(n, vector<int>(n, 0));
if (n % 2 == 1) {
ms = makeOddMS(n);
} else if (n % 4 == 0) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int x = j % 4;
int y = i % 4;
if (x == y || (x + y) % 4 == 3) {
ms[j][i] = i * n + j + 1;
} else {
ms[n - 1 - j][n - 1 - i] = i * n + j + 1;
}
}
}
} else {
int a, b, c, d;
int n_half = n / 2;
auto ms1 = makeOddMS(n_half);
for (int i = 0; i < n_half; i++) {
for (int j = 0; j < n_half; j++) {
ms1[i][j] = (ms1[i][j] - 1) * 4;
}
}
for (int i = 0; i < n_half; i++) {
for (int j = 0; j < n_half; j++) {
if (i == n_half - 1) {
a = 1;
b = 4;
c = 3;
d = 2;
} else if ((i == n_half - 2 && j != n_half / 2) ||
(i == n_half / 2 && j == n_half / 2)
) {
a = 1;
b = 4;
c = 2;
d = 3;
} else {
a = 4;
b = 1;
c = 2;
d = 3;
}
ms[i * 2 + 0][j * 2 + 0] = ms1[i][j] + a;
ms[i * 2 + 0][j * 2 + 1] = ms1[i][j] + b;
ms[i * 2 + 1][j * 2 + 0] = ms1[i][j] + c;
ms[i * 2 + 1][j * 2 + 1] = ms1[i][j] + d;
}
}
}
show(n, ms);
return 0;
}