模拟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$处被判断掉了。

posted @ 2019-10-17 08:41  skyh  阅读(160)  评论(2编辑  收藏  举报