【每日一题】Problem 359B. Permutation

发布时间 2023-06-24 15:38:16作者: HelloEricy

原题

解决思路

虽然题解思路里写着 \(dp\),但是还是用最简单的 \(math\) 方法写了
找规律题:

  1. 如果结果为 \(0\),只需要每个 \(a_{2i-1}-a_{i}\) 同向即可,即都为整数或负数
  2. 如果结果为 \(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;
}