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