Sakura_Emilia
2024-11-20 02:24:42
这道题其实有点类似于素数环问题,一开始尝试使用 DFS 直接搜索。但其实没必要进行搜索,直接特殊构造即可。要求相邻的两个数相加为合数,在构造时选取最特殊的情况,相邻两个数为偶数即可。
如何构造使得相邻的两个数相加为偶数?最简单的方案是将
最小的同时为奇数和合数的数是
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define Ciallo main
#define int long long
using namespace std;
int T, n;
inline void solve() {
cin >> n;
if(n <= 4)
cout << -1 << endl;
else if(n == 5)
cout << "1 3 5 4 2" << endl;
else if(n == 6)
cout << "1 3 5 4 2 6" << endl;
else if(n == 7)
cout << "1 3 5 4 6 2 7" << endl;
else if(n == 8)
cout << "1 3 5 4 2 6 8 7" << endl;
else {
for(int i = 3; i <= n; i++)
if(i % 2 == 1)
cout << i << ' ';
cout << 1 << ' ' << 8 << ' ';
for(int i = 2; i <= n; i++)
if(i % 2 == 0 and i != 8)
cout << i << ' ';
cout << endl;
}
}
signed Ciallo() {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin >> T;
while(T--)
solve();
return 0;
}