#P3921. 经典递推数列

经典递推数列

题目描述

有这么一个游戏:写出一个 1n1 \sim n 的排列 a1,a2,,ana_1, a_2, \dots, a_n,然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少 11,直到只剩下一个数字为止。

下面是一个例子:

初始序列:3,1,2,43, 1, 2, 4
第一次相加:4,3,64, 3, 6
第二次相加:7,97, 9
第三次相加:1616

最后得到 1616 这样一个数字。

现在想要倒着玩这样一个游戏,如果知道 nn,以及最后得到的数字的大小 sumsum,请你求出最初的序列 aia_i(应该是一个 1n1 \sim n 的排列)。若答案有多种可能,则输出字典序最小的那一个。如果无解,则什么也不输出。

输入格式

一行,两个正整数 nnsumsum,用空格隔开。

输出格式

一行,nn 个整数,表示字典序最小的答案,相邻整数之间用一个空格隔开。如果无解,不输出任何内容。

样例

4 16
3 1 2 4

数据范围与提示

  • 1n121 \le n \le 121sum130001 \le sum \le 13000
  • 注意最终的数字是由初始排列经过类似于杨辉三角的相邻相加得到的,系数为二项式系数。可以利用二项式系数来反向求解。

来源

CSPJ-重点算法班