洛谷 P9570 「NnOI R2-T2」Glaciaxion
简要题意
给定一个数 $n$ 和 $m$ 表示有从 $1$ ~ $n$ 的正整数和 $m$ 次操作。每次操作给出一个字母 N 或 Y,如果给出 N 说明有一个数字第一次被选中并输出,如果给出 Y 就要从刚刚选出来的数里再选一个输出出来。现在要求若干输出里字典序最小的序列,如果无解输出 No solution。
策略分析
无解情况
- 当给出
N的次数超过 $n$ 时不合法,因为每个数第一次出现的次数总和至多为 $n$。 - 当还没有给出
N就给出Y时不合法,因为Y不能选出以前没有选出来的数。 - $n$ 或 $m$ 等于 $0$ 的时候不合法
构造
下面的分析基于所有合法条件。我们要求最后输出序列字典序最小,所以我们考虑建立一个从 $1$ 开始的指针,当出现 N 时输出指针,然后指针移动到下一个数。给出 Y 前一定给出了 N,而第一次给出 N 时我们选出的数一定是 $1$,因为它的字典序最小。而既然已经选出来了,后面每一次 Y 我们都要在已经选出的数里选一个最小的,那么我们选出来的数必然是 $1$。所以我们只需要在输入 N 的时候输出递增的那个指针并将其自增,输入 Y 的时候输出 $1$ 就可以了。
参考代码
1 |
|
说些什么吧!