CSP2024-30

A

题意:将一个圆等分为 K 分,给出其中 n 个等分点的编号,xi<xi+1

有向边 ij 存在,当且仅当 j 是距离 i 最大的点(不唯一),且与图中其他边无交点(端点不算)。

求图中最多有多少条边。3K109,3nmin(K,105)

引理:不存在 AB, CD,其中 A,B,C,D 互不相同。

作过 A 的直径 AA,作 B 关于 AA 的对称点 B

  • 如果 CDBB 上,由于大弧对大角 AC(D)>ABAB 的边不能存在,矛盾。
  • 如果 CD 包含于 ABCB>CD,矛盾。
  • 如果 CABDAB,两边相交,不合法。

因此合法的状态只有两种:以某个点为中心的菊花状图;三条边首尾相连形成的等腰三角形。

注意两点的距离可以由对应弧长表示,也可以表示为跨过了多少整段:min(|xixj|, K|xixj|),这是个凸函数,可以二分找分界点。

求出离每个 i 距离最大的点集(最多两个),时间复杂度 O(nlogn)。(双指针能做到线性)

submission

B

题意:给出字符串 s,t,文本串 T 的权值定义为 s 作为子序列在 T 出现的次数乘上 t 作为子序列在 T 出现的此次数。

给定 S,求 S 所有子串的权值和。|S|105, |s|,|t|20

考虑没对子序列 (s1,s2) 对答案的贡献(被多少区间包含),显然是第一个出现的位置乘上从最后位置开始的一个后缀长度。

f(i,j,k) 表示前 i 个字符,匹配到 s1 的第 j 位,s2 的第 k 位的开头位置和。

  • f(i,j,k)[Ti=s1,j=s2,k]×f(i1,j1,k1)
  • f(i,j,k)[Ti=s1,j]×f(i1,j1,k)
  • f(i,j,k)[Ti=s2,k]×f(i1,j,k1)
  • f(i,0,1)[Ti=s1,1]×f(i1,0,0), f(i,1,0)[Ti=s2,1]×f(i1,0,0), f(i,1,1)[Ti=s1,1=s2,1]×f(i1,0,0)
  • f(i,j,k)f(i1,j,k)

考虑以 i 结尾的贡献,不能从第五种转移过来(因为对应方案 i 不是结尾),前四种转移过后的 f(i,|s1|,|s2|) 乘上 |T|i+1

submission

C

定义函数:

f(u,x,y)={uyx=1u1<xy, xyx×yx1, xy0otherwise

给定长度为 n 的数组 a,定义一段区间 [l,r] 的优美度等于:

i=1106j=lrf(u,i,aj)

q 次询问,每次给出 l 和参数 u,求 rl 的最大优美度,以及对应最小的 r

数据范围:n,q5×105, 1ai106, 1ui1.8×107

交换一下求和号:

j=lri=1106f(u,i,aj)

注意到 i=1106f(u,i,aj)=φ(aj)×uaj×σ(aj),其中 σ(aj) 表示 aj 的所有正因子和。

那么所求为:

maxr=lni=lrφ(ai)×uai×σ(ai)

si(u)=j=1iφ(aj)×uaj×σ(aj)

(maxr=lnsr(u))sl1(u)

注意到 si(u) 是关于 u 的一次函数,且斜率和截距均容易计算。

我们将询问离线,从前往后插入直线,问题转化横坐标为 usir(u) 的最大值(及编号),李超线段树维护。

submission(你说得对但是我不会线性筛 sigma)

作者:Luxinze

出处:https://www.cnblogs.com/Luxinze/p/18442974

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Lu_xZ  阅读(5)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示