#P15635. [2019年保加利亚国家队组队赛Senior]串行魔方阵
[2019年保加利亚国家队组队赛Senior]串行魔方阵
题目描述
“魔方阵”指的是这样一种方阵:其中填入一些数,使得每一行、每一列以及两条对角线上的元素和都相同,这个共同的值称为“幻和”。
这类方阵有许多经典例子。这里我们定义其中一个很有趣的子类,称为“串行魔方阵”。
给定一个奇数正整数 n。如果一个 n × n 的数表满足以下条件,我们称它为一个串行魔方阵:
- 其中恰好填入从
1到n^2的所有整数; - 它本身是一个魔方阵;
- 去掉最外层边框之后,剩下的边长为
n - 2的方阵仍然是魔方阵; - 继续不断去掉最外层边框,得到的方阵仍然始终是魔方阵,直到只剩下中心格子,而中心格子当然是一个平凡的魔方阵。

原题中给出的说明为:图中的 n = 7 串行魔方阵,其最外层 7 × 7 方阵的幻和为 175;去掉灰色外框后得到的 5 × 5 方阵幻和为 125;继续去框后得到的 3 × 3 方阵幻和为 75;最里面的中心格子的值为 25。
手工构造这样的串行魔方阵并不容易。请编写程序 magsq,输出一个“串行性”尽可能强的魔方阵(评分方式见下文)。
输入格式
输入一行,一个奇数正整数 n。
输出格式
输出 n 行,每行 n 个正整数,用空格分隔,表示一个尽可能具有“串行性”的魔方阵。
数据范围
n为奇数,且n ≤ 200
评分说明
输出结果在以下情况下一定得 0 分:
- 它没有包含从
1到n^2的所有整数,并将它们排成n行,每行n个整数; - 它不是一个魔方阵。
否则,该测试点一定获得该测试点分值的 10%。
剩余的 90% 分数根据你的结果中有多少个边长为 n-2, n-4, …, 3 的内嵌方阵也是魔方阵来决定,也就是说,取决于你的构造距离真正的 n 阶串行魔方阵有多近。
若该测试点满分为 X,已验证的内嵌魔方阵个数(不含最外层和最中心的平凡方阵)为 k,则得分为:
X * (0.1 + 1.8 * k / (n - 3))
结果按一位小数计算。
样例输入
7
样例输出
22 1 2 15 42 47 46
5 23 10 12 41 39 45
21 20 24 19 32 30 29
36 34 33 25 17 16 14
43 37 18 31 26 13 7
44 11 40 38 9 27 6
4 49 48 35 8 3 28