这题考场上想了很久没过。。。
首先我觉得好像有个性质 要让字典序最小 肯定要把 1 到 m 个数放到 1 到 m 号位置
然后就构造 分开讨论 如果 2m <= n 就这么做:
6 5 4 | 10 9 8 7 | 1 2 3
否则就
// 前提: m <= n && (2 * m - n >= 0) && (2 * n - 3 * m >= 0)
for (int i = 1; i <= 2 * m - n; i++) {
printf("%d ", n - (2 * n - 3 * m) - i + 1);
}
for (int i = 1; i <= 2 * n - 3 * m; i++) {
printf("%d ", n - i + 1);
}
for (int i = 1; i <= m; i++) {
printf("%d ", i);
}
如果会有长度小于 0 的段就输出 1 到 n
但是只有 70pts 错了两个点
不知道哪里没想到