企业建设网站个人总结,泉州企业网站建设公司,wordpress自适应自媒体主题,开发网站放大文字功能怎么写1、题目
G. Special Permutation
这道题的意思是给我们从111到nnn的排列#xff0c;然后我们对这个排列的顺序上进行调换#xff0c;需要满足的条件是任意两个相邻元素的绝对值的差满足条件#xff1a;2≤∣pi−pi1∣≤42\leq |p_i-p_{i 1}|\leq 42≤∣pi−pi1∣≤4 …1、题目
G. Special Permutation
这道题的意思是给我们从111到nnn的排列然后我们对这个排列的顺序上进行调换需要满足的条件是任意两个相邻元素的绝对值的差满足条件2≤∣pi−pi1∣≤42\leq |p_i-p_{i 1}|\leq 42≤∣pi−pi1∣≤4
2、分析
我们很容易发现如果我们把奇数放在一起偶数放在一起那么对于这两部分而言内部相邻的元素必定是满足条件的。
现在的问题是奇数部分和偶数部分之间衔接的地方我们需要让这个地方也满足条件。因此我们可以将奇数从大到小枚举那么最后一
个奇数就一定是111。为了保证偶数和111的差值的绝对值是大于等于222的我们就不能在111的右面放222。所以我们可以在111的右面放444。在444的右
面放222222的后面放666。666后面按照升序枚举剩余的偶数即可。
根据上面的条件可以知道我们必须得有444才行。所以如果我们的nnn是比444小就无法构造出符合条件的序列反之即可以构造。
3、代码
#includebits/stdc.h
using namespace std;void solve()
{int n;cin n;vectorintv(n);if(n 4){cout -1 endl;return;}for(int i n; i 0; i --){if(i % 2)cout i ;}cout 4 ;for(int i 2; i n; i ){if(!(i % 2) i ! 4){cout i ;}}cout endl;return;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin t;while(t --)solve();
}