CF1818B 题解

· · 题解

一道挺有意思的构造题。我们将 n 分三类讨论。

$n$ 为其它奇数时,由于奇偶性,$n + 1$ 必然被 $2$ 整除,那么就有 $\sum\limits_{i = 1}^{n} A_i = \dfrac{n \times (n + 1)}{2} = n \times (\dfrac{n + 1}{2})$,显然被 $n$ 整除,所以此时一定不满足条件,输出 `-1`。 $n$ 为偶数时,构造 $2, 1, 4, 3 \cdots n, n - 1$ 的序列,接下来说明这种方式为什么是对的。 首先假如当题目中的 $l$ 和 $r$ 奇偶性不同时,容易推出 $\sum\limits_{i = l}^{r} A_i = \dfrac{(r - l + 1) \times (l + r)}{2}$,然后由于奇偶性,$r - l + 1$ 必然被 $2$ 整除, $l + r$ 必然不被 $2$ 整除,所以这个式子可以变为 $\dfrac{r - l + 1}{2} \times (l + r)$,再结合 $l + r$ 不被 $2$ 整除,这个式子显然不能被 $r - l + 1$ 整除。 当 $l$ 和 $r$ 奇偶性相同时,假如同时是奇数,容易推出 $\sum\limits_{i = l}^{r} A_i = \dfrac{(r - l + 1) \times (l + r)}{2} + 1$;假如同时是偶数,容易推出 $\sum\limits_{i = l}^{r} A_i = \dfrac{(r - l + 1) \times (l + r)}{2} - 1$。由于奇偶性,$l + r$ 必然被 $2$ 整除,于是 $\dfrac{(r - l + 1) \times (l + r)}{2} = \dfrac{l + r}{2} \times (r - l + 1)$,显然被 $r - l + 1$ 整除,所以易知这里的两种情况都是不被 $r - l + 1$ 整除的。 所以这种构造必然正确。 ```cpp void solve() { scanf ("%d", &n); if (n == 1) { cout << 1 << '\n'; return; } if (n & 1) { cout << -1 << '\n'; return; } for (int i = 2; i <= n; i += 2) cout << i << ' ' << i-1 << ' '; putchar(10); } ```