B3622题解

· · 题解

题目传送门

题目大意:

求所有由YN构成的长度为 n 的序列,按字典序输出。

题目分析

如果让 N 代表 0Y 代表 1,那么样例输出就可以转化为:

000
001
010
011
100
101
110
111

我们发现,这正好是 0~7 的二进制表示!

于是,我们可以这么想:遍历 02^n-1 ,将每一个数转为二进制,每一位是 0 则输出 N,否则输出 Y

那么,如何把十进制数转成二进制呢?我们可以观察:

13=(1101)_2 13\!\!\mod2=1=(1)_2 \lfloor\dfrac{13}{2}\rfloor=6=(110)_2

明白了吗?\lfloor \dfrac{x}{2}\rfloor 相当于去掉二进制下 x 的最后一位,而 x\!\!\mod2 相当于取出 x 的最后一位。