U301582 线段填数问题

题目背景

```cpp #include #include #include using namespace std; int main() { int n; cin >> n; if (n < 3) { cout

题目描述

有一个正 $n$ 边形,每条边上都有 $n$ 个点(包括两端点)。 同时,有 $2n$ 个正整数,依次为 $1, 2, \cdots, 2n-1, 2n$。 要求你将它们按照一定顺序填入点中,填入完毕之后每条边上点的和都相等且最大。 请注意,可能出现无法使每条边的和相等的情况。 ------------ 假设 $n = 3$ ,则图形如下: ![](https://cdn.luogu.com.cn/upload/image_hosting/ppr2yxw0.png)

输入格式

一行,一个正整数 $n$ ,含义见题面。

输出格式

输出共两行: 第一行,一个整数 $s$ ,表示每条边最大的和。 第二行,$2n$个正整数,表示填空的结果,用空格隔开。 输出顺序从最大数所在的点开始,顺时针旋转到最大数的旁边一个数。 如果出现无法使每条边的和相等的情况,就只输出 $-1$ 。

说明/提示

【数据范围】 $3 \leq n \leq 10^6$ 【样例解释】 样例 $1$ 的填数方法如下: ![](https://cdn.luogu.com.cn/upload/image_hosting/ptkf8z7h.png)