2024.6.8

2024.6.8

比赛信息

比赛时间:8:10~12:00

出题人:马未然

题目内容

T1

题面

给定一个长为 m 的正整数序列 a ,求最多从 a 中选出多少个数,使得这些数的阶乘之积整除 n

m,a2×105,n109

解法

可知,当 a1<a2 的时候,a1!|a2!,所以可以贪心地将按照从小到大的顺序选择 a 。整除问题,考虑分解质因数。因为 a 的值域较小,以此入手,预处理出 2×105 以内的质数,则以如下方法分解质因数,最后逐个加入,得到答案。

n!=ppjnj

抽象化方法

  • 整除、因数、倍数等问题应该分解质因数

  • 对连续信息进行处理的时候。可以以每个元素入手,基于其连续性整体处理。

    例如:区间筛中,以质数入手对区间进行处理

    ​ 本题中,以每个元素入手对进行 n! 进行高效分解

    ​ 处理区间因子个数函数区间和的时候,应该从因子考虑

    连续性息:值域上的区间、前后缀函数

T2

题面

给定一个长度为 n 的序列,每次可以合并其中连续的 k 个并将其异或和写在相应的位置上,直到只剩下一个数,求写下数字之和最小值

n500,k50

解法

区间DP

fl,r,c 表示在区间 lr 中合并成 c 个数的最小值,易得状态转移方程

fl,r,c=minlj<rfl,j,1+fj+1,r,c1c1=minlj<rfl,j,1+fj+1,r,c1+(qzxorarqzxorl1)c=1

边界: fi,i,1=0

复杂度 O(n3k) 可以卡过

抽象化方法

  • 划分区间——设法二分

    一般的区间DP是将两个区间进行合并,而这个题是将 k 个区间进行合并,于是直接合并的复杂度从 O(len) 变为了 O((lenk))O(len!) 。但是k=1+k1,这样就有了上式

T3

题面

给定 k 个区间,求构造满足以下条件的序列 {a} 的方案数

  1. 序列长度为 n
  2. i[1,n],1aim
  3. i[1,k],[li,ri]中存在相同的数

n,m106,k2000

解法

可以去掉包含的大区间

考虑容斥,一二为通用限制,三为受容斥限制,令 fS 表示考虑只选 S 中的区间的方案数,则答案为

SU(1)|S|fS

但这个直接计算的复杂度 O(2k)

但观察这个式子,发现当我们往 S 中加入一个元素时,其正负号取反,于是我们可以考虑每次往 S 中加入一个元素,进行考虑

对区间按照右端点排序,设 gi=S{1,2,,i1},T=S{i}(1)|S|fT,其意义为考虑前 i 个区间,确定 i 必选时的不满足条件的区间数,则

gi=mli1mrili+1j<i{gjmlirj1mrili+1rj<ligj[m(rjli+1)]rirjrjli

SU(1)|S|fS=mnmnrii1gi

抽象化方法

  • 集合选择问题——增量法+统一考虑

    在一个全局中选择若干的个元素考虑其价值,可以尝试依次往考虑集合中加入元素,用以前计算的结果更新他。其实就是背包问题的原理

    将集合若干中选法捆绑整体考虑,减少状态。(当然有时不行,例如状压DP)

T4

题面

给定 m 个带权 c 点对 (a,b),支持两种操作:

  1. 修改点权
  2. 给出 k 个点 pi,求满足 apibpi 的点对中第 x 小权值

a,b,m105,k4

解法

k=0 的时候,本题变为模板题,可用权值线段树与平衡树解决。

k=1 的时候,相当于是从全局中去掉了若干个点,所以要使用维护可减性信息的权值线段树。我们可以对全局和每个点分别维护一棵权值线段树,查询的时候作减法

k>1 的时候,上述方法可能会使得一条边被减两次,按照容斥的思路,将其加回来就行了。

抽象化方法

  • 当一个变量非常小的时候,寻找特例

作者:lupengheyyds

出处:https://www.cnblogs.com/lupengheyyds/p/18497686

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

posted @   lupengheyyds  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示