模拟76
$T1.$
一开始想简单了。
非常快得码完,刚交上去就发现自己好像伪了。。。。
然后发现有一档部分分$A*B=N$,可以非常简单地构造。
然后就想到正解了。
$T2.$
我们可以发现,在大部分情况下,答案都是连续的。
那么我们只需要考虑,答案在什么地方会断开。
显然只有相邻两个能被拼出的数$a_i$,$a_j$,并且$a_j$比$a_i$的2倍更大时才会出现不合法。
进一步观察可以发现,这种情况只会出现在$a_i$为某些数的和,$a_j$为一个数时。
于是排完序,前缀和扫一遍就没了。
$T3.$
考试的时候一直在想,前序遍历是啥。。。
然后突然发现前序遍历好像就是$dfs$序,也就是说,每个点的子树序号是连续的一段。。。
然后就可以设计$dp$转移了。
另外,由于我考场上没有想到怎么保证合法,所以只能拿$bitset$判断合法性,极限数据跑了$3.5s$,然后我手写了$bitset$,它就从$3.5s$直接砍到了$1.2s$。甚至跑的比某些$O(n^3)$还快。。。。
手写bitset牛逼bitset复杂度是O(1)的