【CF】Day46——Codeforces Round 967 (Div. 2) B
B. Generate Permutation
题目:
思路:
写写水题
这题简单思维,就是题目有点长
简单来说就是我们要构造一个数列,使得满足第一台机器回到起点的位置和第二台机器回到起点的位置次数一样
那么要让第一台机器回到起点,那么肯定是 x / x + 2 / x + 1 这样的,同理让第二台机器回到起点要类似 x + 1 / x + 2 / x 这样的
那么一个显然的方法就是构造 1 3 5 7 9 .... n n - 1 n - 3 n - 5 ..... 8 6 4 2
这样的话对于 1 2 机器一肯定要回到原点开启下一次的 3 4,而机械二遇到1后回到起点时直接就能解决 2 然后去解决 3 4,可以看出是一个对称的操作
特殊情况,如果 n 是偶数是无法构成的,因为此时必定会有一个机器会比另一个机器起码多一次操作,因为肯定有一个机器可以一次解决掉两个数,而另一个机器无法一次解决两个数,就像我们上述构造的这个一样
代码:
#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n;cin >> n;if (n % 2 == 0){cout << "-1\n";return;}for (int i = 1; i <= n; i+=2){cout << i << " ";}for (int i = n-1; i >= 2; i -= 2){cout << i << " ";}cout << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}