20230802模拟赛

20230802模拟赛

T1数学题

题意

\(A,B,C\) 为三个质数(\(A\leq B\leq C\)),\(N=A\times B\times C\)

给出 \(N(1\leq N\leq 10^{14})\),求 \(B\)

题解

\(A\leq B\leq C\) 可证复杂度直接枚举 \(1e7\) 个质数,求 \(B\)

T2子序列

题意

给定一个长度为 \(n(\leq 35)\) 的序列: \(a_1,a_2,a_n\)

要求你从中选出一个子序列,使得这个子序列的和对 \(m\) 取模后最大。

题解

折半搜索板子题。

T3模

题意

给定一个数组和一个 \(m\)

支持单点加,单点减,区间取模求和。

题解

分块板子。

T4组队

题意

给定一个长度为 \(n\) 的序列 \(A\),给定 \(k\),可以修改 \(k\) 个数,求最少把 \(A\) 划分成多少个子段,使得每个字段任意两个数的乘积不为平方数。

题解

先把 \(a=\prod_{i=1}^n p_i^{k_i}\) 变成 \(a=\prod_{i=1}^m p_i\),即删去平方因数。这样判断就可以直接化成判断两个数是否相等。

看到 \(k\leq 20\) 考虑 \(O(nk^2)\) 或者 \(O(nk)\) 的 DP。

显然转移是通过划分整段进行的,设状态 \(f_{i,j}\) 表示的就是划分到 \(i\),当前改变过 \(j\) 个数能够划分出的最小段数。

考虑怎么转移。一个很明显的思路就是枚举上次划分到 \(k\),则从 \(f_{k,p}\) 转移到 \(f_{i,j}\),且如果假定把 \([k+1,i]\) 作为一个整段,在这段中需要改变的数为 \(num\),则有 \(p+num=j\)

所以可以考虑枚举上个划分点到 \(i\) 消耗了多少次修改,设 \(l_{i,x}\) 表示最小的 \(pos\) 使得 \([pos,i]\) 作为一个整段时消耗了 \(x\) 次修改,所以枚举不同的修改次数时,对于一个修改次数只有一种转移(因为最远所以最优),这样大大简化了 DP 过程。

\[f_{i,j}=\min(f_{i,j},f_{l_{i,x},j-x}+1) \]

\(l\) 数组可以用一个一个数组和一个标记数组 \(dp\) 时求出来。

T5玩树

题意

给你一棵树,点数为 \(n\),第 \(i\) 个点的权值为 \(a_i\)

定义一条路径 \(b_1,b_2,\dots,b_m\) 的权值是 \(\frac{\prod_{i=1}^{m}b_i}{m}\)

求树上所有路径的最小值。

多测,\(1\leq n\leq 50000,\sum n\leq 500000,1\leq a_i \leq 10^9\)

题解

引理 \(1\) :一条长度为 \(n\) 的路径随机摧毁一个点,余下的两段(或一段)中,较长者长度不小于 $\left \lfloor \frac{n}{2} \right \rfloor $。

引理 \(2\) :答案的路径中,最多有一个 \(2\),除此之外全为 \(1\)

证明:若路径中存在 \(b>2\) ,将其删去后,分子除以 \(b\) ,分母最多除以 \(2\),删去后肯定更优秀。

若路径中有 \(2\),当且仅当 \(n\) 为奇数且 \(2\) 在路径中点。

若有两个 \(2\) 当且仅当 \(2\) 为中间两个,但是将该路径分开答案不变。若不分开,两端再接上一个 \(1\) 后会发现,分开肯定更优。

这样就直接考虑换根 \(dp\) 了,较为简单,过。

posted @ 2023-08-29 21:55  sunzz3183  阅读(11)  评论(0编辑  收藏  举报
Live2D