CF1454A Special Permutation 题解

Content

给定一个整数 \(n\),请构造出一个长度为 \(n\) 的排列 \(\{a_i\}_{i=1}^n\),使得对于每个 \(a_i\),都有 \(a_i\neq i\)

我们称一个长度为 \(n\) 的数列为一个排列,当且仅当所有 \(1\sim n\) 的整数都出现且仅出现了一次。比如说 \([2,3,1,5,4]\) 就是一个长度为 \(5\) 的排列,而 \([1,2,2]\)\([1,3,4]\) 都不是一个排列。

数据范围:\(1\leqslant t\leqslant 100,2\leqslant n\leqslant 100\)

Solution

我发现当时的构造方法复杂了些……还是讲讲吧。

如果 \(n\) 是偶数,直接倒着输出 \(n,n-1,...,1\) 即可。

如果 \(n\) 是奇数,输出 \(n,n-1,...,\left\lfloor\dfrac {n+1}2\right\rfloor+1,1,2,...,\left\lfloor\dfrac {n+1}2\right\rfloor\) 即可。

Code


int t, n; 

int main() {
	t = Rint;
	while(t--) {
		int n = Rint;
		if(!(n % 2)) R(i, n, 1) printf("%d ", i);
		else {
			int mid = (n + 1) >> 1;
			R(i, n, mid + 1) printf("%d ", i);
			F(i, 1, mid) printf("%d ", i);
		} 
		puts("");
	}
	return 0;
}
posted @ 2021-12-16 14:42  Eason_AC  阅读(33)  评论(0)    收藏  举报