Processing math: 100%

模拟76 题解

A. 序列

观察部分分,可以得到一些奇怪的构造方法。

比如当N=AB,直接将数按A的大小或B的大小分块就可以了

接着打表,发现似乎全部的情况都可以通过类似的方法构造出来。

只要对后面的部分分块,前面不足的部分不用分块。

 

 

 

B. 购物

奇妙的数的范围很宽泛,达到[k,2k]的程度。

显然的结论是:对于[amax2,ni=1ai]的一切数,都是奇妙的。

所以可以拿到70分。

仔细想想,可以用一个类似背包的过程来进行这个dp

首先将权值0加入数组p

依次考虑ai

对于p中每一个数,在选ai和不选的情况下分别加入数组q

对数组q进行排序。 清空数组p

如果qi+1pq_ip$数组的末尾。

显然p数组的大小不会超过2log2sum,所以时间复杂度是正确的。

在加法的意义下,因为奇妙的数的区间达到[k,2k]

对于加入一个非负数,相邻两个数会由pi,pi+1,变为pi+x,pi+1+x

由于保证pi2>pi+1pi2+x2>pi+1+x是显然的。所以正确性是可以证明的。

最终考虑相邻两个数可以统计答案。

 

 

 

C. 计数

对于m=0,显然答案为卡特兰数。

然后发现暴搜似乎挺难打的,所以直接搞正解。

显然我们关注的状态有:

当前节点,子树大小,中序遍历意义下的排名。

所以直接将这个设为状态,进行dp

对于一些限制,只要判断是否合法之后转移。

对于这个合法性判断,显然可以直接枚举数对,简单转化题意,即范围内是否存在一个点,直接用二维前缀和处理。

因为状态数较少,dp进行过程可以为记忆化搜索。

然后就会发现,似乎没有用到状态的最后一维,也就是中序遍历排名。

实际上确实是这样的,因为在中序遍历下不合法的点对,都在其lca处被判断掉了。

posted @   skyh  阅读(162)  评论(2编辑  收藏  举报
编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示
主题色彩