CF1818 & 1817 题解

Div2 A

容易发现最后要存活下来一定要每次和 1 号做出相同的选择,直接数就好了.

Div2 B

容易发现当 n 为奇数的时候无解。
考虑 n 为偶数的情况怎么构造,有一种方案是在 ai=i 的基础上调整,交换一下 a2i1a2i,证明考虑左右端点的奇偶性。

Div2 C & Div1 A

考虑一段连续的不升子序列,那么这里必须最少删到只剩下两个数,考虑贪心删除,删前面的,这样就转化成数 [l+2,r] 有多少的 i 使得 ai2ai1ai1ai
特判一下区间长度小于等于 2

Div2 D & Div1 B

考虑从"四度点"作为突破口解题。
对于每个四度点,只要找到一个只经过他两个儿子的环即可。一种方法是把所有的儿子染色然后 bfs,然后只要找到一条连接不同颜色的边即可。

Div2 E & Div1 C

考虑 A(x)B(x) 之间的关系。

B(x)=i=0dai(x+s)i

考虑这么两项:[xd]B(x)[xd1]B(x)

[xd]B(x)=ai,[xd1]B(x)=ad(d1)s+ad1

那么现在直接把两个多项式的最后一项插出来就好了。

[xd]F(x)=i=0dyiji(xixj)

[xd1]F(x)=i=0dyiji(xixj)×ji(xj)

预处理一下阶乘逆元

Div2 F & Div1 D

对于 kn+12 的情况,发现每一次做 LDRU 可以把第二个挪到第一个。
剩余情况考虑把 k 挪到 n+12 的位置,先把他挪到最后:RDLU 再进行一次 LU 即可。

Div1 E

首先将所有数从大到小进行排序,发现每次把一段前缀变成最小值,剩余的变成最大值。
考虑移动边界 ii+1,那么贡献的变化为:

D=ai+2ai+12n(i+1)ai+1ai2i

bi=ai+1ai 扩展一下,分解从 ij 的代价为

D=bi2i+k=i+1j1(12nk12k)bk+bj2nj

考虑中间那个和式的贡献,i,jn2 时贡献为负,此时若 j 过于靠近 n2 那么一定比 1 更劣,具体来说就是取前 logbi 不为 0 的位置。j 更大情况也是如此,检查最后 log 个。

Div1 F

原本 SAM 直接做还有些困难,但是用基本子串结构就很容易了!
建出来,然后考虑一个等价类怎么统计答案,发现枚举 b 的左端点位置,那么 aendpos 一定在其左边,可以直接前缀和查,再考虑 b 的右端点方案数,这个由基本子串结构的形态决定。

posted @   Matutino_Lux  阅读(21)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示