#NC2501B. 二进制子串 2

二进制子串 2

题目描述

给定两个整数 n n m m ,你需要找到一个长为 n n 的二进制字符串,其本质不同的非空子串的数量恰好为 m m 。这里 m m 不小于 n n ,这是长为 n n 的二进制字符串中本质不同非空子串的最小数量,并且不超过 Mn=i=1nmin{2i,ni+1} M_n = \sum_{i=1}^n \min\{2^i, n-i+1\} ,这是已经得到证明的最大数量。

然而上述这个问题似乎太难了,因此你只需要找到一个长为 n n 的二进制字符串,使其不同的非空子字符串的数量与 m m 的相对误差最多为 0.20.2,即在范围 [0.8×m,1.2×m][0.8 \times m, 1.2 \times m] 内,或者指出没有满足条件的二进制字符串。

输入格式

输入的第一行包含一个整数 T(1T104) T (1 \leq T \leq 10^4) ,表示测试数据的组数。对于每组测试数据:

仅有的一行包含两个整数 n(1n2×105) n (1 \leq n \leq 2 \times 10^5) m(nmMn) m (n \leq m \leq M_n)

保证所有测试数据 n n 的总和不超过 2×105 2 \times 10^5

输出格式

对于每组测试数据,输出一行包含一个满足条件的长度为 n n 的二进制字符串,或者输出 -1 表示没有满足条件的二进制字符串。

5
5 5
5 6
5 7
5 8
5 9
00000
00000
-1
00001
00001
5
1 1
2 3
3 5
4 8
5 12
0
01
011
0110
01100

解释 #1

  1. 对于 n=5,m=5 n=5, m=5 的情况,字符串 00000 正好有 55 个不同的非空子串(0, 00, 000, 0000, 00000)。
  2. 对于 n=5,m=6 n=5, m=6 的情况,不存在满足条件的字符串,因为任何长度为5的二进制字符串至少会有 55 个不同的子串,而最大可能值 M5=12 M_5=12 ,但 66 不在 [0.8×5,1.2×5][0.8×5,1.2×5][4,6][4,6] 范围内。
  3. 对于 n=5,m=7 n=5, m=7 的情况,字符串 00001 有7个不同的非空子串(0, 00, 000, 0000, 1, 01, 0001)。