题面:
题意:
给定 n(偶数),a,b,构造长度为 n 的排列,使得左半边的数都小于等于 a,右半边的数都大于等于 b。
题解:
显然,a≤(n/2)+1,b≥(n/2),特判 a 和 b 在序列中间的情况外,剩下的就一一输出就行。
代码:
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define eps 1e-10
#define lowbit(x) x&-x
#define int long long
int T,n,a,b;
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin>>T;
while(T--)
{
cin>>n>>a>>b;
if(a>n/2+1||b<n/2||
(a==n/2+1&&b!=n/2)||(a!=n/2+1&&b==n/2))
cout<<-1<<endl;
else{
for(int i=n;i>n/2;i--)
{
if(i==b) cout<<a<<" ";
else cout<<i<<" ";
}
for(int i=1;i<=n/2;i++)
{
if(i==a) cout<<b<<" ";
else cout<<i<<" ";
}
cout<<endl;
}
}
return 0;
}