构造。
Description
构造一个 \(1\sim n\) 的排列,使之连续子串构成 \(1\sim k\) 排列的数目最少。
Analysis
显然,最小数目可以为 \(2\)。因为可以构造所示的排列:
\[1,A_2,A_3,A_4,\cdots,A_{n-1},2 \]此时 \(1\) 和 \(2\) 分居两侧,中间的 \(n-2\) 个数排列任意,连续的排列仅 \(\left[1,n\right]\) 和 \(\left[1,1\right]\) 两个。
Code
#include <stdio.h>
int n;
inline void Solve() {
scanf("%d", &n);
printf("1 ");
for (int i = n; i >= 2; --i)
printf("%d ", i);
putchar('\n');
}
int main(void) {
int T; for (scanf("%d", &T); T--; ) Solve();
return 0;
}
The end. Thanks.
(鞠躬撒花