20240914 模拟赛
A 开挂(openhook)
可以发现结果序列是能确定的,而且我们并不关心具体对哪个数进行操作,有用的信息只有操作次数,从而可以得到一个数组 表示对某个数操作了某个次数。设对 个数进行了操作,将 从小到大排序,将 中的前 小从大到小排序,于是 。
要最小化这个值,注意到 的和是一定的,那么肯定是让较大的数越大越好,也就是尽可能不平均。考虑从原数组中取出一个最大的不重集合并排序,那么剩下的数要么插入集合中的两个数之间,要么放到末尾。放到末尾的部分容易处理,只需求出插入的情况。按值从小到大枚举这个集合中可插入的区间,根据分析的性质发现插入的数原本要越大越好,并且从大到小插入。二分出可插入的数,链表维护剩下的数就好,时间复杂度 。
B 叁仟柒佰万(clods)
容易注意到一个性质,分开后每段的 一定为全局 ,因为每个出现过的数都会使某一段的 不为这个数。于是可以想到双指针维护哪些区间的 为全局 ,时间复杂度 。
瞪眼可以想到一个 dp,设 表示前 个数分 段的方案数,这是 的。很快发现记录段数根本没用,于是省掉第二维变成 。于是得到这样的式子:f[i] += f[l - 1] * check(l, i);
,根据双指针的预处理可以 check。
分析得到能产生贡献的总是一段前缀,前缀和优化即可做到 。
这题卡空间,只能开 3 个 37000000 的 int 数组,把 省去即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】