题解:CF2137B Fun Permutation

· · 题解

题目大意

给一个长度为 n 的排列 p,请找出另一个长度为 n 的排列 q,使得每一个 1 \le i < n,都有 \gcd(p_i+q_i,p_{i+1}+q_{i+1}) \geq 3

思路

思维题。

如果我们让 q_i=n-p_i+1,那么 q 很明显也是一个排列,这时我们把式子化简一下可得 \gcd(p_i+q_i,p_{i+1}+q_{i+1}) = n+1,因为 n \geq 2,所以 n+1 \geq 3,所以 \gcd(p_i+q_i,p_{i+1}+q_{i+1}) \geq 3

所以这种构造是满足条件的,直接输出即可。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,p[200005];//定义
signed main()
{
    cin>>t;
    while(t--)//多测
    {
        scanf("%lld",&n);
        for(int i=1;i<=n;i++)  scanf("%lld",&p[i]);//输入
        for(int i=1;i<=n;i++)
        {
            printf("%lld ",n-p[i]+1);//输出
        }
        printf("\n");//记得换行
    }
    return 0;
}