题解:CF2147B Multiple Construction

· · 题解

题目传送门。

思路

一般本蒟蒻看到构造题时,总是先想办法找到通用解法。

由于数字越少间隔越小(如果有通解,间隔一般不会倍数错乱),我们让小的数排在中间,大的数排在外围,就会得到如下序列。

[n,n-1,n-2,\cdots,2,1,1,2,\cdots,n-2,n-1,n]

发现:如果在这个数列中,在两个 1 中插入一个数即可满足条件。它只能是移动后序列仍满足条件的 n

最终序列如下。

[n-1,n-2,\cdots,2,1,n,1,2,\cdots,n-2,n-1,n]

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<n;i++) cout<<n-i<<' ';
        cout<<n<<' ';
        for(int i=1;i<=n;i++) cout<<i<<' ';
        cout<<"\n";
    }
    return 0;//抱歉没放AC记录
}