模拟76 题解
A. 序列
观察部分分,可以得到一些奇怪的构造方法。
比如当$N=A*B$,直接将数按$A$的大小或$B$的大小分块就可以了
接着打表,发现似乎全部的情况都可以通过类似的方法构造出来。
只要对后面的部分分块,前面不足的部分不用分块。
B. 购物
奇妙的数的范围很宽泛,达到$[k,2k]$的程度。
显然的结论是:对于$[\lceil \frac{a_{max}}{2} \rceil,\sum \limits_{i=1}^{n}a_i]$的一切数,都是奇妙的。
所以可以拿到70分。
仔细想想,可以用一个类似背包的过程来进行这个$dp$。
首先将权值0加入数组$p$,
依次考虑$a_i$,
对于$p$中每一个数,在选$a_i$和不选的情况下分别加入数组$q$。
对数组$q$进行排序。 清空数组$p$。
如果$q_{i+1}已经大于当前$p$的最后一个值的两倍,那么加入$q_i$到$p$数组的末尾。
显然$p$数组的大小不会超过$2*log_2sum$,所以时间复杂度是正确的。
在加法的意义下,因为奇妙的数的区间达到$[k,2k]$,
对于加入一个非负数,相邻两个数会由$p_i$,$p_{i+1}$,变为$p_i+x$,$p_{i+1}+x$
由于保证$p_i*2>p_{i+1}$,$p_i*2+x*2>p_{i+1}+x$是显然的。所以正确性是可以证明的。
最终考虑相邻两个数可以统计答案。
C. 计数
对于$m=0$,显然答案为卡特兰数。
然后发现暴搜似乎挺难打的,所以直接搞正解。
显然我们关注的状态有:
当前节点,子树大小,中序遍历意义下的排名。
所以直接将这个设为状态,进行$dp$,
对于一些限制,只要判断是否合法之后转移。
对于这个合法性判断,显然可以直接枚举数对,简单转化题意,即范围内是否存在一个点,直接用二维前缀和处理。
因为状态数较少,$dp$进行过程可以为记忆化搜索。
然后就会发现,似乎没有用到状态的最后一维,也就是中序遍历排名。
实际上确实是这样的,因为在中序遍历下不合法的点对,都在其$lca$处被判断掉了。