【典】一个计数小技巧
其实是一个比较常用的数数技巧,但是遇到题目的时候总是忘掉。
就是形如已知一个序列,求有多少个排列满足一个条件,这个条件一般是制约相邻两个元素的。
那么可以采用一个技巧就是序列排序,然后按照某种顺序插入。
ABC267G *2561
有一个长度为 的序列 ,求有多少种排列方式满足恰好 个 ,满足 。
。
考虑有多少排列问题,那么可以先对 排序然后依次插入。
每次插入一个最大值,那么只需要求有多少个位置满足插入后满足条件的位置 ,然后直接跑一遍简单的背包即可。
ARC148E *2785
有一个长度为 的序列,求有多少个不同的排列满足所有 满足 。
。
考虑先排序,如果从小到大,会发现很难搞,因为满足条件位置数量一直在变化。
考虑从小到大加入一个数前,先把与他满足条件的点都加入,那么可以发现可以插入的位置数就是固定的了。
具体而言,维护区间 ,不断向中间移动,那么可以发现如果 满足就把 放入,否则放入 ,考虑这样对于 ,这些数的旁边都可以放,而对于 就都不行,因此可以直接算了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效