zyh_helen‘s Construction Round残缺题解

题目描述

对于一个 0∼n−1 的排列 p 和一个 x∈[0,n−1],每次操作时会依次发生以下两个事件:

  • x:=px​;
  • ∀i∈[0,n−1],pi​:=(pi​+1)modn。

称第 i 次操作后的 x 为 xi​,特别的,初始的 x 称为 x0​。

现在我们有 x0​=0,请你构造一个长度为 n 的排列 p 满足在 n−1 次操作后,∀i∈[0,n−1],∃j∈[0,n−1],xj​=i,即 x 是一个排列。

可以证明一定有解。

输入格式

一个正整数,表示 n。

输出格式

输出一行 n 个数,表示你构造的排列 p。

输入输出样例

输入 #1复制

4

输出 #1复制

2 1 0 3

说明/提示

样例解释

初始时,x=0,p=[2,1,0,3]。

第一次操作后,x=2,p=[3,2,1,0]。

第二次操作后,x=1,p=[0,3,2,1]。

第三次操作后,x=3,p=[1,0,3,2]。

数据范围

对于 30% 的数据,保证 n 为奇数。

对于 100% 的数据,保证 1≤n≤106。

思路

直接构造。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
    cin>>n;
    for(int i=(n+1)/2;i>=0;i--){
        cout<<i<<" ";
    }
    for(int i=n-1;i>=(n+1)/2+1;i--){
        cout<<i<<" ";
    }
    cout<<endl;
	return 0;
}

posted @ 2025-10-09 11:28  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源