解决思路
虽然题解思路里写着 \(dp\),但是还是用最简单的 \(math\) 方法写了
找规律题:
- 如果结果为 \(0\),只需要每个 \(a_{2i-1}-a_{i}\) 同向即可,即都为整数或负数
- 如果结果为 \(2k\),则只需要任意一个 \(|a_{2i-1}-a_{i}|\) 的值为 \(k\),且与其他的 \(a_{2i-1}-a_{i}\) 方向不同,那么一正一负中和后,相差的结果正好是 \(2k\)。取 \(a_{1} = 1\),\(a_{2} = 1 + k\) 根据题意 \(2k\le n\),因此此方法可行
#include <bits/stdc++.h>
int main() {
int n, k; std::cin >> n >> k;
int a, b; a = b = 0;
if (k > 0) {
a = 1, b = 1 + k;
std::cout << a << " " << b << " ";
}
for (int i = 2 * n; i >= 1; --i) {
if (i == a || i == b) continue;
std::cout << i << " ";
}
std::cout << std::endl;
}
标签:std,cout,int,359B,Permutation,Problem,2i,2k
From: https://www.cnblogs.com/HelloEricy/p/17501185.html