Loading

2024.6.8

2024.6.8

比赛信息

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

出题人:马未然

题目内容

T1

题面

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

\(m,a\le 2\times10^5,n\le10^9\)

解法

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

\[n!=\prod_pp^{\sum_j\lfloor\frac nj\rfloor} \]

抽象化方法

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

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

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

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

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

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

T2

题面

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

\(n\le500,k\le50\)

解法

区间DP

\(f_{l,r,c}\) 表示在区间 \(l\sim r\) 中合并成 \(c\) 个数的最小值,易得状态转移方程

\[\begin{aligned} f_{l,r,c}&=\min_{l\le j<r}f_{l,j,1}+f_{j+1,r,c-1}& c\not=1\\&=\min_{l\le j<r}f_{l,j,1}+f_{j+1,r,c-1}+(qzxora_r\oplus qzxor_{l-1})&c=1 \end{aligned} \]

边界: \(f_{i,i,1}=0\)

复杂度 \(\mathcal O(n^3k)\) 可以卡过

抽象化方法

  • 划分区间——设法二分

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

T3

题面

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

  1. 序列长度为 \(n\)
  2. \(\forall i\in[1,n], 1\le a_i\le m\)
  3. \(\forall i\in [1,k],[l_i,r_i]\)中存在相同的数

\(n,m\le 10^6,k\le 2000\)

解法

可以去掉包含的大区间

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

\[\sum_{S\subset U}(-1)^{|S|}f_S \]

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

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

对区间按照右端点排序,设 \(g_i=\sum\limits_{S\subset\{1,2,\cdots,i-1\},T=S\cup\{i\}}(-1)^{|S|}f_T\),其意义为考虑前 \(i\) 个区间,确定 \(i\) 必选时的不满足条件的区间数,则

\[g_i=m^{l_i-1}m^{\underline{r_i-l_i+1}}-\sum_{j<i} \left\{\begin{aligned} &g_jm^{l_i-r_j-1}m^{\underline{r_i-l_i+1}}&r_j<l_i\\&g_j[m-(r_j-l_i+1)]^{\underline{r_i-r_j}}&r_j\ge l_i \end{aligned}\right. \]

\[\sum_{S\subset U}(-1)^{|S|}f_S=m^n-m^{n-r_i}\sum_{i\ge1}g_i \]

抽象化方法

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

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

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

T4

题面

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

  1. 修改点权
  2. 给出 \(k\) 个点 \(p_i\),求满足 \(a\not=p_i\land b\not=p_i\) 的点对中第 \(x\) 小权值

\(a,b,m\le 10^5,k\le4\)

解法

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

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

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

抽象化方法

  • 当一个变量非常小的时候,寻找特例
posted @ 2024-10-23 16:33  lupengheyyds  阅读(19)  评论(0)    收藏  举报