#oLHLybttg030706. 1532:太鼓达人
1532:太鼓达人
1532:太鼓达人
题目描述
七夕祭上,Vani 牵着 cl 的手,在明亮的灯光和欢乐的气氛中愉快地穿行。这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 XLk、Poet_shy 和 lydrainbowcat 拯救出来的的 applepi。看到两人对太鼓达人产生了兴趣,applepi 果断闪人,于是 cl 拿起鼓棒准备挑战。然而即使是在普通难度下,cl 的路人本性也充分地暴露了出来。一曲终了,不但没有过关,就连鼓都不灵了。Vani 十分过意不去,决定帮助工作人员修鼓。
鼓的主要元件是 个围成一圈的传感器。每个传感器都有开和关两种工作状态,分别用 和 表示。显然,从不同的位置出发沿顺时针方向连续检查 个传感器可以得到 个长度为 的 串。Vani 知道这 个 串应该是互不相同的。而且鼓的设计很精密, 会取到可能的最大值。现在 Vani 已经了解到了 的值,他希望你求出 的值,并给出字典序最小的传感器排布方案。
输入格式
一个整数 。
输出格式
一个整数 和一个二进制串,由一个空格分隔。表示可能的最大的 ,以及字典序最小的排布方案,字符 0 表示关,1 表示开。你输出的串的第一个字和最后一个字是相邻的。
样例
样例输入 #1
3
样例输出 #1
8 00010111
样例解释 #1
- ,传感器围成一圈。
- 可能的最大 是 ,因为长度为 的二进制串共有 种。
- 一种排布方案为
00010111,长度为 。 - 从每个位置开始取连续 位(循环):
- 位置 :
000 - 位置 :
001 - 位置 :
010 - 位置 :
101 - 位置 :
011 - 位置 :
111 - 位置 :
110 - 位置 :
100(注意最后两位和第一位连起来)
- 位置 :
- 这 个串互不相同,且包含了所有可能的 位二进制串。
- 方案
00010111是字典序最小的(即 尽可能多在前)。
数据范围
对于全部测试点,。
时空限制
- 时间限制:1000 ms
- 内存限制:131072 KB
注意:本题是求 de Bruijn 序列。对于给定的 ,最大 。我们需要构造一个长度为 的 环,使得每个长度为 的 串恰好出现一次(作为环上的连续 个字符)。构造方法可以转化为求欧拉回路:将每个长度为 的 串看作顶点,从顶点 (即一个 位串)通过添加一个位 或 得到下一个顶点 (即 去掉最高位,再在末尾添加新位),这样构成一条有向边。这样图有 个顶点,每个顶点有两条出边(添加 或 )和两条入边(从两个前缀转移而来)。该图存在欧拉回路,回路长度为 ,对应一个 de Bruijn 序列。要求字典序最小,即在 DFS 或 Hierholzer 算法中优先选择添加 的边。注意输出序列时,需要从全 的顶点开始,并且最后 位要与开头 位相同(因为是环)。由于 ,顶点数最多 ,边数 ,可以轻松求解。