CF1754B Kevin and Permutation

题链:cf luogu

看到 Permutation 就是构造?

Description

构造一个 \(1\sim n\) 的排列 \(p\),使之邻居之差的最小值最大。

Analysis

考虑这样的奇异思路。

\(1\sim n\) 一剖两半,分别为 \(1\sim\lfloor\frac{n}{2}\rfloor\)\(\lfloor\frac{n}{2}\rfloor +1\sim n\)。分别倒序取值输出。

这样保证了相邻两数的差值最小为 \(\lfloor\frac{n}{2}\rfloor\)

Code

为了简化对于奇数 \(n\) 的处理,此处采用 vis 去处理此时中间的 \(\frac{n+1}{2}\)

#include <stdio.h>
int n; bool vis[1005];
inline void Solve() {
	scanf("%d", &n); for (int i = 1; i <= n; ++i) vis[i] = false;
	for (int i = 1; i <= n + 1 >> 1; ++i) {
		if (!vis[(n + 1 >> 1) - i + 1]) printf("%d ", (n + 1 >> 1) - i + 1), vis[(n + 1 >> 1) - i + 1] = true;
		if (!vis[n - i + 1]) printf("%d ", n - i + 1), vis[n - i + 1] = true;
	}
	putchar('\n');
}
int main(void) {
	int T; for (scanf("%d", &T); T--; ) Solve();
	return 0;
}

The end. Thanks.

(拇指点点

posted @ 2022-10-25 16:43  Dry_ice  阅读(81)  评论(0)    收藏  举报