P5890 小欧与回文串构造

题目描述

小欧很喜欢字符串,尤其是只有 `0` 和 `1` 两种字符的回文串。 小欧也喜欢回文串,尤其是有那么一些回文子串但不是很多的串。 小欧更喜欢构造,所以他思考如下问题: 给定正整数 $n$ 和 $k$,保证 $k\le n$,能否构造一个长为 $n$ 的,只含有字符 `0` 和 `1` 的字符串 $S$,使得 $S$ 的本质不同非空回文子串个数恰好为 $k$ 呢? 小欧是构造小鬼,打不过已经爆切十万甚至九万道构造的先辈们,因此他找你帮忙解决这个问题,并希望你在有解时给出任意一个构造。 下面给出一些关于字符串的基本定义,字符串大手子可以跳过不读。 - 对于长为 $n$ 的字符串 $S$,定义 $S_i$ 为字符串 $S$ 的从左至右第 $i$ 个字符, - 对于长为 $n$ 的字符串 $S$,定义其子串 $S[l;r]\; (1\le l\le r\le n)$ 为将字符 $S_l,S_{l+1},\ldots,S_{r}$ 自左至右拼接形成的字符串。特别地,空串也是 $S$ 的子串。 - 称 $S$ 的两个子串 $S[l_1;r_1]$ 和 $S[l_2;r_2]$ 本质不同,当且仅当 $S[l_1;r_1] \ne S[l_2;r_2]$。 - 对于长为 $n$ 的字符串 $S$,定义它的反串 $S^{T}$ 为将字符 $S_n,S_{n-1},\ldots,S_1$ 自左至右拼接形成的字符串。 - 字符串 $S$ 为回文串,当且仅当 $S=S^{T}$。

输入格式

**本题有多组数据**。 第一行一个正整数 $T$,表示数据组数。 对于每组数据: 一行两个正整数,表示这组数据给出的 $n$ 和 $k$。

输出格式

对于每组数据: 若该组数据没有解,输出一行一个字符串 `No`; 否则输出两行,第一行一个字符串 `Yes`,接下来一行一个长为 $n$ 的 `01` 串,为你构造的解。有多个解输出任意一个即可。

说明/提示

对于第一组数据,本质不同的回文子串有:`1`,`0`,`101`,`010` 共四个。 ### 数据范围与约定 对于 $20\%$ 的数据,$n\le 15$。 另有 $10\%$ 的数据,$k=n$。 另有 $20\%$ 的数据,$1000\le n\le 2000$,$k\ge \left\lfloor\dfrac{n}{2}\right\rfloor+100$。 对于 $100\%$ 的数据,$1 \le T \le 10$,$1\le k\le n\le 2\times 10^5$。