模拟76 题解
A. 序列
观察部分分,可以得到一些奇怪的构造方法。
比如当N=A∗B,直接将数按A的大小或B的大小分块就可以了
接着打表,发现似乎全部的情况都可以通过类似的方法构造出来。
只要对后面的部分分块,前面不足的部分不用分块。
B. 购物
奇妙的数的范围很宽泛,达到[k,2k]的程度。
显然的结论是:对于[⌈amax2⌉,n∑i=1ai]的一切数,都是奇妙的。
所以可以拿到70分。
仔细想想,可以用一个类似背包的过程来进行这个dp。
首先将权值0加入数组p,
依次考虑ai,
对于p中每一个数,在选ai和不选的情况下分别加入数组q。
对数组q进行排序。 清空数组p。
如果qi+1已经大于当前p的最后一个值的两倍,那么加入q_i到p$数组的末尾。
显然p数组的大小不会超过2∗log2sum,所以时间复杂度是正确的。
在加法的意义下,因为奇妙的数的区间达到[k,2k],
对于加入一个非负数,相邻两个数会由pi,pi+1,变为pi+x,pi+1+x
由于保证pi∗2>pi+1,pi∗2+x∗2>pi+1+x是显然的。所以正确性是可以证明的。
最终考虑相邻两个数可以统计答案。
C. 计数
对于m=0,显然答案为卡特兰数。
然后发现暴搜似乎挺难打的,所以直接搞正解。
显然我们关注的状态有:
当前节点,子树大小,中序遍历意义下的排名。
所以直接将这个设为状态,进行dp,
对于一些限制,只要判断是否合法之后转移。
对于这个合法性判断,显然可以直接枚举数对,简单转化题意,即范围内是否存在一个点,直接用二维前缀和处理。
因为状态数较少,dp进行过程可以为记忆化搜索。
然后就会发现,似乎没有用到状态的最后一维,也就是中序遍历排名。
实际上确实是这样的,因为在中序遍历下不合法的点对,都在其lca处被判断掉了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!