2025.11 模拟赛记录

2025.11.2 ZROI

  • 理想得分:100+100+100+24
  • 期望得分:100+100+20+0
  • 实际得分:100+100+20+0

上升序列 *1600

给定两个单调不降序列 \(a,b\),执行不超过 \(m\) 次操作,每次操作选择一个 \(a_i\) 和一个整数 \(x\),执行 \(a_i\gets a_i+x\),并耗费 \(x^2\) 的代价。操作过程中始终需要保证 \(a\) 不降。问将 \(a\) 变为 \(b\) 的最小代价。或报告无解。

\(1\le n,m\le 10^5,0\le a_i,b_i\le 10^9\)\(a,b\) 单调不降。

1s 1GB

考虑假设有一个极长的\([l,r]\),满足 \(\forall i\in[l,r]\)\(a_i<b_i\)。那么我们可以从 \(r\)\(l\) 依次修改 \(a_i\),这样可以始终保证 \(a\) 不降;\(a_i>b_i\) 同理。因此对于每个位置,我们都可以直接看成是独立的。那这样的话,令 \(c_i=|a_i-b_i|\),设 \(c_i>0\) 的有 \(k\) 项,那么无解即为 \(m<k\)

现在我们需要对 \(c_i\) 总共做 \(m\) 次划分的操作。贪心地,将 \(c_i\) 划分成 \(j\) 个段时,平均分的代价和最小。这个基本不等式可以求得。

于是用堆维护每个 \(c_i\) 当前被划分的段数,然后每次从堆中取出,再多划分一段后代价减小最多的,并执行这个操作。时间复杂度 \(O((n+m)\log n)\)

生成树 *2000

给定一棵 \(n\) 个节点的以 \(1\) 为根的树,节点 \(i\) 的父亲为 \(\text{fa}_i\),并且有 \(1\le\text{fa}_i<i\ (i\in[2,n])\)。求所有可能的树的树高之和。对素数 \(p\) 取模。

\(2\le n\le 800,10^8\le p\le10^9,p\in\mathbb P\)

2s 1GB

考虑这样的树有什么共同的性质。由于一定有 \(\text{fa}_2=1\),所以可以考虑 \(2\) 子树内和 \(2\) 子树以外的部分。dp,设 \(f_{i,j}\) 表示考虑了前 \(i\) 个点,树高为 \(j\) 的方案数。那么这棵树取到高度 \(j\) 有两种情况:

  • \(2\) 子树的高度为 \(j-1\):枚举 \(2\) 子树的大小 \(k\)\(2\) 子树外的高度 \(x\),然后 \(2\) 子树内有 \(k-1\) 个点的编号集合是可以任意确定的,所以有:

    \[f_{i,j}\gets f_{i,j}+\sum\limits_{k=1}^{i-1}\sum\limits_{x=1}^jf_{k,j-1}\cdot f_{i-k,x}\cdot\binom{i-2}{k-1} \]

  • \(2\) 子树外的高度为 \(j\):枚举 \(2\) 子树的大小 \(k\)\(2\) 子树的高度 \(x\),编号集合和上一种情况一样,所以组合数也一样。此外由于上一种情况已经包含了 \(2\) 子树内高度为 \(j-1\)(此时 \(2\) 子树内外的最大深度都是 \(j\))的情况,所以这里枚举 \(2\) 子树的高度只能到 \(j-2\)。那么有:

    \[f_{i,j}\gets f_{i,j}+\sum\limits_{k=1}^{i-1}\sum\limits_{x=1}^{j-2}f_{k,x}\cdot f_{i-k,j}\cdot\binom{i-2}{k-1} \]

上面两个直接转移是 \(O(n^4)\) 的,维护前缀和可以优化到 \(O(n^3)\)

归并排序 *2200

给定一个长度为 \(n\)\(n\)\(2\) 的幂)的排列 \(a\) 做归并排序,但是递归到区间长度为 \(2\) 时随机交换,其余归并过程不变。维护 \(q\) 次操作:

  • \(\texttt1\ x\ y\):交换 \(a_x,a_y\)
  • \(\texttt2\ x\ y\):如果对当前的 \(a\) 做上述归并排序后得到 \(a'\),求 \(a'_y=a_x\) 的概率。对 \(10^9+7\) 取模。

\(2\le n\le 2^{18}\)\(n\)\(2\) 的幂,\(a\)\(1\sim n\) 的排列,\(1\le q\le 5\times10^5\)

归并的过程,相当于把一个递减的段合并成一组后,以组中最大的数作为归并时比较的值,进行归并。于是对于一组 \((a_{2k-1},a_{2k})\),若交换后逆序了,则合并成一组。

\(P(a'_y=a_x)\) 的概率相当于是 \(a_x\) 排到第 \(y\) 个的概率。考虑可能随机交换的一组 \((a,b)\),不妨设 \(a<b\)。假设现在有一组数以 \(x\) 来比较。

  • \(x<a\):此时 \(a,b\) 一定都会排在 \(x\) 后面。
  • \(b<x\):此时 \(a,b\) 一定都会排在 \(x\) 前面。
  • \(a<x<b\):此时,如果 \(a,b\) 是顺序的,那么一个在 \(x\) 之前一个在 \(x\) 之后;否则两个都会排在 \(x\) 之后。

那么考虑用 BIT 维护一定在 \(a_x\) 之前的数的数量。求答案可以计算一个组合数。时间复杂度 \(O((n+q)\log n)\)

*DFS 序

2025.11.9 ZROI

  • 理想得分:100+100+100+20
  • 期望得分:100+36+0+20
  • 实际得分:100+36+0+10

Andnot *1600

给定一个长度为 \(n\) 的非负整数序列 \(a\),任意重排 \(a_i\),最小化 \(\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n(a_i\text{ and }(\text{not }a_j))\)

\(1\le n\le 5\times10^5,0\le a_i<2^{29}\)

1s 1GB

对于一对 \((x,y)\),若 \(x<y\),则 \(x\text{ and }(\text{not }y)\le y\text{ and }(\text{not }x)\)。故 \(a_i\) 升序时最优。然后按位计算贡献即可。要开 ull。时间复杂度 \(O(n\log n+n\log V)\)

Binstr *2100

给定一个长度为 \(n\)\(\tt 01\) 串。现可以对其进行任意次(可以为零)操作,每次操作为如下之一:

  • 删除一个子串 \(\tt 01\)
  • 删除一个子串 \(\tt 10\)
  • 将一个子串 \(\tt 0\) 替换成 \(\tt 00\)

最大化最终可能包含的形如 \(\tt 0101\cdots01\) 的连续 \(\tt 01\) 个数,并在此前提下最小化操作次数。

\(1\le t\le 5,1\le n\le 5\times10^5\)

1s 1GB

执行操作三的时候,后面必然会执行操作一或二,不然不优。所以替换过程可以变为如下四种:

  • \(\tt01\to\varnothing\),代价为 \(1\)
  • \(\tt10\to\varnothing\),代价为 \(1\)
  • \(\tt 01\to0\),代价为 \(2\)
  • \(\tt10\to0\),代价为 \(2\)

\(\tt 0\) 看作向右下,\(\tt 1\) 看作向右上,则将 \(\tt 01\) 串变成一条折线,并且字符位于其指向方向的拐点处。由于操作只能删去 \(\tt 1\) 或者一对 \(\tt0\)\(\tt 1\),所以最终这个最长的答案子串内,每个位置在最初的折线上纵坐标单调不减。容易发现这是充要的。

因此只要在这个折线上求出这样的最长不降子序列即可。BIT 维护即可,操作次数可以统计 \(\tt0\)\(\tt1\) 的个数求出。时间复杂度 \(O(n\log n)\)

Disconnect *2100

给定 \(n\) 个点的树,点 \(i\) 有权值 \(a_i\),它和点 \(p_i(p_i<i)\) 相连。将树删去若干条边,设 \(t_i\) 表示在树上和当前点 \(i\) 所在连通块内的某个点相邻,且在新图中不与点 \(i\) 连通的节点个数。最大化 \(\sum\limits_{i=1}^na_it_i\)。给定 \(n_0\),对于保留前 \(n_0,n_0+1,\cdots,n\) 个点所构成的树,都要求出答案。

\(1\le n_0\le n\le 5\times10^5,1\le p_i<i,1\le a_i\le 2\times10^7\)

1s 1GB

对于一个非叶子节点来说,它本身要尽可能地最大化贡献,那么就需要它所在的连通块的邻域尽可能多。因此删的边只可能是连接叶子的边。进一步发现删的边一定连接了权值最小的几个叶子。然后这东西算一下贡献发现是凸的。三分即可。由于要支持动态加点,用 BIT 维护即可。时间复杂度 \(O(n\log n)\)

*Partition

2025.11.10 OIFC

  • 理想得分:100+100+0+0
  • 期望得分:100+0+0+0
  • 实际得分:100+0+0+0

旅行 *1600

给定一个 \(n\) 个点的树。要求选择一个起点,构造一条路径,并且这条路径经过 \(m\) 次节点,并且共经过 \(k\) 种不同的节点。或报告无解。

\(1\le k\le n\le 4\times10^5,1\le m\le 2n\)

1s 512MB

从直径的一段走到另一端,剩下没走的节点都挂在直径上,每个未走的节点都需要一来一回,贡献两步,可以插入到在走直径的过程中。构造出这样的路径后再在某条边上来回走达到 \(m\) 的限制。无解在模拟行走的过程可以判得。时间复杂度 \(O(n+m)\)

区国的魔法 *2000

给定两个 \(1\sim n\) 的排列 \(a,b\)\(n\) 次选择,第 \(i\) 次选择需要选择 \(a_i\)\(b_i\)。问最终选择的数有至少 \(k\) 种的选择方案数。对 \(10^9+7\) 取模。

\(1\le k\le n\le 10^4,1\le a_i,b_i\le n\)

1s 256MB

\(a_i,b_i\) 连边后就相当于是若干个置换环,需要给其定向,要求度数不为 \(0\) 的点至少有 \(k\) 个。设 \(f_i\) 表示当前处理过的若干个完整置换环,非零度点恰有 \(i\) 个的定向方案数。

对于每个置换环内部再 dp。设 \(g_{i,j,0/1}\) 表示当前处理的置换环内处理了前 \(i\) 个点,非零度点有 \(j\) 个,并且上一个点的定向方向。然后可以容易计算出方案数。最后再将 \(g\)\(f\) 暴力合并得到新的 \(f\)。最终答案即为 \(\sum\limits_{i=k}^nf_i\)。时间复杂度 \(O(n^2)\)

*最大独立集问题

*树

2025.11.12 OIFC

  • 理想得分:100+100+12+36
  • 期望得分:100+36+12+36
  • 实际得分:100+36+12+36

破译系统 *1600

给定一个长度为 \(n\) 的非负整数序列 \(a\),现将其划分成任意个非空子段 \(S_1,S_2,\cdots,S_k\)。问有多少种划分方法,满足 \(\mathop{\text{mex}}\limits_{i=1}^k\{\min\{S_i\}\}=\min\limits_{i=1}^k\{\text{mex}\{S_i\}\}\)

\(1\le n\le 5\times10^5,0\le a_i\le 10^9\)

1s 512MB

\(a\) 中不存在 \(0\),那么一定有 \(\min\{S_i\}>0\)\(\text{mex}\{S_i\}=0\),所以这时条件一定成立。划分方案数即为 \(2^{n-1}\)

\(a\) 中存在 \(0\),那么一定存在至少一个 \(S_i\) 满足 \(\min\{S_i\}=0\)\(\text{mex}\{S_i\}>0\)。前者可以得到 \(\mathop{\text{mex}}\limits_{i=1}^k\{\min\{S_i\}\}>0\),进而得到 \(\min\limits_{i=1}^k\{\text{mex}\{S_i\}\}>0\),因此每个 \(S_i\) 内都要有一个 \(0\)。这导致了所有的 \(S_i\) 都满足 \(\min\{S_i\}=0\)。因此 \(\mathop{\text{mex}}\limits_{i=1}^k\{\min\{S_i\}\}=1\),即 \(\min\limits_{i=1}^k\{\text{mex}\{S_i\}\}=1\)

也就是说,我们划分出的子段需要满足的条件有:

  • 每个 \(S_i\) 内都必须存在 \(0\)
  • 至少一个 \(S_i\) 内不包含 \(1\)

然后就可以对着当前是否存在不包含 \(1\) 的段直接 dp。我想了一个奇异搞笑的复杂 dp。设 \(f_{i,0/1,0/1,0/1}\) 表示考虑了前 \(i\) 个数,除 \(a_i\) 所在段外,前面的完整段是否存在不包含 \(1\) 的段,当前段是否有 \(0\),当前段是否有 \(1\),对应的划分方案数。

\(a_i\) 分讨就可以得到一大坨状态转移。注意需要对 \(a_i\) 是否为新一段的开头分别转移,再加起来。

  • \(a_i=0\)

    \[\begin{aligned} f_{i,0,1,0}&=f_{i-1,0,0,0}+f_{i-1,0,1,0}+f_{i-1,0,1,1}\\ f_{i,0,1,1}&=f_{i-1,0,0,1}+f_{i-1,0,1,1}\\ f_{i,1,1,0}&=f_{i-1,1,0,0}+f_{i-1,1,1,0}+f_{i-1,0,1,0}+f_{i-1,1,1,1}+f_{i-1,1,1,0}\\ f_{i,1,1,1}&=f_{i-1,1,0,1}+f_{i-1,1,1,1} \end{aligned} \]

  • \(a_i=1\)

    \[\begin{aligned} f_{i,0,0,1}&=f_{i-1,0,0,0}+f_{i-1,0,0,1}+f_{i-1,0,1,1}\\ f_{i,0,1,1}&=f_{i-1,0,1,0}+f_{i-1,0,1,1}\\ f_{i,1,0,1}&=f_{i-1,1,0,0}+f_{i-1,1,0,1}+f_{i-1,0,1,0}+f_{i-1,1,1,1}+f_{i-1,1,1,0}\\ f_{i,1,1,1}&=f_{i-1,1,1,0}+f_{i-1,1,1,1} \end{aligned} \]

  • \(a_i>1\)

    \[\begin{aligned} f_{i,0,0,0}&=f_{i-1,0,0,0}+f_{i-1,0,1,1}\\ f_{i,0,0,1}&=f_{i-1,0,0,1}\\ f_{i,0,1,0}&=f_{i-1,0,1,0}\\ f_{i,0,1,1}&=f_{i-1,0,1,1}\\ f_{i,1,0,0}&=f_{i-1,1,0,0}+f_{i-1,0,1,0}+f_{i-1,1,1,0}+f_{i-1,1,1,1}\\ f_{i,1,0,1}&=f_{i-1,1,0,1}\\ f_{i,1,1,0}&=f_{i-1,1,1,0}\\ f_{i,1,1,1}&=f_{i-1,1,1,1} \end{aligned} \]

最终答案即为 \(f_{n,0,1,0}+f_{n,1,1,0}+f_{n,1,1,1}\)。时间复杂度 \(O(n)\)

单源最短路 *2100

给定一个 \(n\)\(m\) 边的有向图,对于第 \(i\) 条边有 \(k_i\) 个经过该边后不能立刻走的边。求从 \(1\) 开始到每个点的最短路。

\(1\le t\le 3,1\le n,m\le 5\times10^5,0\le w,k_i,\sum k_i\le 10^6\)

2.5s 512MB

考虑对边建图跑 Dijkstra。注意到,忽略限制后我们只需要考虑到 \(i\) 号边的距离前 \(k_i+1\) 小的边。这时这里面必然有可以直接松弛到该边的边。于是在跑 Dijkstra 时,如果某条边被成功松弛,则直接删去连接这两条边的边。均摊下来只需要松弛 \(O(\sum k_i)\) 次。故时间复杂度为 \(O(m\log m+\sum k_i)\)

*重构

*区间移动

2025.11.14 OIFC

  • 理想得分:100+100+100+0
  • 期望得分:0+100+0+0
  • 实际得分:0+95+0+0

蛇 *2800

对于一个 01 串,给定常数 \(k\),可以任意次地进行如下操作之一:

  • 选择一个长度为 \(k\) 的子串并将每一位 01 翻转。
  • 选择一个长度为 \(k\) 的子串,要求全 0 或全 1,并将其删去。

现在给定一个长度为为 \(n\)\(\tt 01?\) 串和常数 \(k\),求将每个 \(\tt?\) 分别任意地替换成 \(\tt 0\)\(\tt 1\) 后,可以按照上述操作得到的所有可能的不同的字符串的数量。对 \(10^9+7\) 取模。

\(1\le t\le 10,1\le k\le n\le 10^5\)

1.5s 512MB

先不考虑 \(\tt ?\)。将原序列异或差分,则两个操作就变成了在一个长度为 \(n+1\)\(\tt 01\) 序列 \(a_{[0,n]}\) 上的修改(约定 \(a_{n}=0\)):

  • 选择一个 \(i\),执行 \(a_i\gets a_i\oplus1\)\(a_{i+k}\gets a_{i+k}\oplus1\)
  • 选择一个 \(i\),保证对于 \(\forall j\in(i,i+k)\)\(a_j\) 全部相同,则将 \(a_{[i,i+k]}\) 整体替换成一个 \(a_i\oplus a_{i+k}\)

那么问题可以转化成对 \(a\) 计数。发现可以将 \(a_i\) 按照 \(i\bmod k\) 相同的位置分开考虑。操作一不会改变异或和。因此对于一个长度相同的序列 \(a'\),若满足对于 \(\forall i\in[0,k)\)\(\bigoplus\limits_{j\bmod k=i}a'_j=\bigoplus\limits_{j\bmod k=i}a_j\),那就一定可以被表示出来。

接下来考虑操作二。发现这种操作对于 \(\forall i\in[0,k)\)\(\bigoplus\limits_{j\bmod k=i}a_j\) 仍旧不变,因此只需要对所有长度 \(m\equiv n+1\pmod k\) 的做一样的计数即可。

接下来考虑存在 \(\tt ?\) 的情况。设 \(v_i\) 表示最终的序列所要求 \(\bmod\ k=i\) 的位置的异或和。那么对于一个位置 \(i\) 上的 \(\tt ?\) 相当于可以让 \(v_{i\bmod k}\)\(v_{(i+1)\bmod k}\) 同时异或 \(1\)。将二者连边,则同一连通块内的均可任意改变。只需要统一连通块内的 \(v_i\) 不同即可。

时间复杂度 \(O(n)\)

白日窃贼 *1800

给定一个 \(1\sim n\) 的排列 \(a\),给定一个常数 \(k\),每次操作可以选择一对 \(a_x,a_y\),要求 \(|a_x-a_y|=k\),并将 \(a_x,a_y\) 交换。求使得 \(a\) 升序的最小操作次数,或报告无解。对 \(k=1\sim n\) 都求出答案。

\(1\le n\le 10^5\)

1.5s 512MB

对于一个数 \(a_j=i\) 需要到 \(i\) 的位置,因此需要保证 \(k\mid|a_i-a_j|\)。也就是说,有解时一定满足 \(k\left|\gcd\limits_{i=1}^n\{a_i-i\}\right.\)

于是分别考虑每个 \(k\)。注意到一组可以相互交换的 \(k\) 在下标上 \(\bmod\ k\) 同余,所以可以直接拿出来。然后计算交换次数。由于一次交换最多减少一个逆序对,所以最优交换次数即为逆序对个数。BIT 维护即可。

时间复杂度 \(O(d(n)\cdot n\log n)\)

树形分流器 *2800

有一棵 \(2n-1\) 个节点的、以 \(1\) 为根的完全二叉树,节点 \(i\) 的左右儿子分别为 \(\text{son}_{i,0/1}\)。每个非叶子节点 \(i\) 有权值 \(a_i,t_i\ (t_i\in\{0,1\})\),当它收到一个大小为 \(x\) 的物品时,若 \(x\ge a_i\),则将 \(x\) 移动到 \(\text{son}_{i,t_i}\),否则移动到 \(\text{son}_{i,1-t_i}\)。初始 \(a_i=0\)

现在可以不花费代价地修改 \(t_i\),或者将 \(a_i\) 修改为整数 \(a'_i\),并花费 \((a_i-a'_i)^2\) 的代价。定义 \(f(u,l,r)\) 表示对于一棵以 \(u\) 为根的子树(保证子树的叶子数量恰好为 \(r-l+1\)),能够使得依次让节点 \(u\) 接收大小为 \(l,l+1,\cdots,r\) 的物品后,每个叶子上恰好有一个物品的最小总修改代价(接收和移动过程中不进行修改)。

现在有 \(q\) 次操作。每次给出 \(u,y,v,l_1,r_1,l_2,r_2\),表示先操作 \(a_u\gets y\),然后求 \(f(v,l_1,r_1)-f(v,l_2,r_2)\) 的值。

\(1\le n,q\le 10^6\)\(0\le \text{son}_{i,0},\text{son}_{i,1},u,v\le 2n-1\)\(-10^9\le y_i,l_i,r_i\le 10^9\)\(r_2-l_2=r_1-l_1\) 且操作和询问合法。

2.5s 512MB

首先肯定可以将 \(a_i\) 调整成 \([l,r]\) 的数,设 \(f(v,l_1,r_1)\) 可以对应到某种最优策略,这时每个 \(a_i\) 有自己在子树中的 \(a\) 的的排名 \(a_i-l\)。如果 \(f(v,l_1,r_1)\) 的最优策略上在 \(f(v,l_2,r_2)\) 不成立,那这时将后者的策略放到前者,前者的策略会更优。因此 \(f(v,l,r)\) 的最优策略和 \(l,r\) 无关。于是对于一个 \(v\),其所有最优策略下 \(a_i-l\) 都是相同的。

设每个 \(a_i\) 被调整成一个 \(l+p_i\),那么:

\[\begin{aligned} f(v,l,r)&=\sum(a_i-l-p_i)^2\\ &=\sum a_i^2+\sum l^2+\sum p_i^2+2\sum(a_i\cdot l)+2\sum(a_i\cdot p_i)+2\sum(l\cdot p_i) \end{aligned} \]

\(\text{sz}_i\) 表示子树 \(i\) 的非叶子节点数,于是就有:

\[\begin{aligned} f(v,l_1,r_1)-f(v,l_2,r_2)=&\sum(a_i-l_1-p_i)^2-\sum(a_i-l_2-p_i)^2\\ =&\left(\sum a_i^2+\sum l_1^2+\sum p_i^2+2\sum(a_i\cdot l_1)+2\sum(a_i\cdot p_i)+2\sum(l_1\cdot p_i)\right)-\\ &\left(\sum a_i^2+\sum l_2^2+\sum p_i^2+2\sum(a_i\cdot l_2)+2\sum(a_i\cdot p_i)+2\sum(l_2\cdot p_i)\right)\\ =&\sum l_1^2-\sum l_2^2+2(l_1-l_2)\sum a_i+2(l_1-l_2)\sum p_i\\ =&\text{sz}_i(l_1^2-l_2^2)-2(l_1-l_2)\sum a_i+(l_1-l_2)(\text{sz}_i+1)\text{sz}_i \end{aligned} \]

用 BIT 维护单点加子树和即可。时间复杂度 \(O(n+q\log n)\)

*饭语

2025.11.16 ZROI

  • 理想得分:100+100+100+20
  • 期望得分:100+20+100+0
  • 实际得分:50+20+100+0

数论 *1800

给定一个长度为 \(n\) 的非负整数序列 \(a\) 和一个常数 \(m\)\(m=0\) 表示 A 先手,否则 B 先手。A 和 B 轮流对序列操作,每次可以取出相邻两数 \(x,y\) 并删去,然后在原位置插入 \(x\times y\)\(x+y\)。若最终序列剩下的一个数为偶数,则 A 胜,否则 B 胜。

\(1\le n\le 10^5,0\le a_i\le 10^9\)

1s 512M

首先显然操作只和 \(a_i\) 奇偶性有关,故先执行 \(a_i\gets a_i\bmod2\)

\(n=1\) 显然。

然后考虑可以进行的操作,包括以下几种:

  • \((0,0)\to(0)\)
  • \((0,1)\to(0)/(1)\)
  • \((1,0)\to(0)/(1)\)
  • \((1,1)\to(0)/(1)\)

发现当序列剩下两个数时,无论怎样都可以操作到剩下一个 \(0\)。因此如果 A 做了最后一次操作,那么 A 必胜。这种情况即是 \(m\equiv n\pmod2\) 的时候。

考虑剩下的情况,B 需要保证序列最终剩下的不能是两个 \(0\)。对于 B 来说,他的最优操作必然是每次将序列中 \(0\) 的个数 \(-1\)

对于 A 来说,如果出现 \((1,1)\),直接换成 \((0)\) 是最优的,这时 \(1\) 的个数 \(-2\) 并且 \(0\) 的个数 \(+1\);不存在的话就是将 \(1\) 的个数 \(-1\)。这时对 B 而言,他必然要将这个 \(0\) 删去。也就是 A 删去这对 \((1,1)\) 不需要耗费代价。于是我们先删去这些 \((1,1)\),最后再统计 \(0,1\) 的个数,相互消即可。

时间复杂度 \(O(n)\)

朱刘算法 *2000

给定 \(n\) 个三元组 \((l_i,r_i,v_i)\)。对于一个排列 \(p\),设数 \(i\) 在排列中出现的下标为 \(\text{pos}_i\),则该排列的权值为 \(\sum\limits_{i=1}^n[l_i\le\text{pos}_i\le r_i]\cdot v_i\)。求权值的最大值。

\(1\le l_i\le r_i\le n\le 2\times10^5\)\(0\le v_i\le 10^4\)

1s 512MB

考虑连边 \(i\to j\ (j\in[l_i,r_i])\),那么对于一个 SCC 来说,将它内部排列只会有一个点的权值取不到,而如果其存在出边,那么这个点的权值也能取到。于是只要将总权值和减去每个不存在出边的 SCC 中边权最小的即可。建图使用线段树优化,时间复杂度 \(O(n\log n)\)

快速傅里叶变换 *2800

给定正整数 \(n,m\),然后依次执行如下过程:

  1. \([1,m]\) 中均匀随机 \(n\) 个互不相同的正整数。
  2. 将他们升序排列得到 \(\{a_1,a_2,\cdots,a_n\}\)
  3. \(a\) 差分,得到 \(\{a_1,a_2-a_1,\cdots,a_n-a_{n-1}\}\)
  4. 将差分数组升序排列,得到 \(\{b_1,b_2,\cdots,b_n\}\)
  5. \(b\) 求前缀和,得到 \(\{b_1,b_1+b_2,b_1+b_2+b_3,\cdots\}\)

求最终得到的序列的每一位的期望,对 \(998244353\) 取模。

\(1\le n\le 3000,1\le m\le 3\times10^5,n\le m\)

1s 512MB

为了方便,我们将题目里的 \(b\) 写作 \(b'\),令 \(b_i=a_i-a_{i-1}\)。同时设 \(\text{ans}_i=\sum\limits_{j=1}^ib_j\),那么问题相当于要求 \(E(\text{ans}_1),E(\text{ans}_2),\cdots,E(\text{ans}_n)\)

对于 \(1\sim 3\) 步,显然可以看作在数轴 \([1,m]\) 上随机取 \(n\) 个正整数断点后,切割成长度分别为 \(b_1,b_2,\cdots,b_n,m-a_n+1\) 的段。这个最后的长度为 \(m-a_n+1\) 的段很难处理,不妨设 \(b_{n+1}=m-a_n+1\),那么 \(\sum\limits_{i=1}^{n+1}b_i=m+1\)。设将 \(b_{[1,n+1]}\) 升序排列后得到 \(b''_{[1,n+1]}\),这东西看着就比 \(b'_{1,n}\) 能做!

\(b''_i\) 的前缀和为 \(\text{sum}_i\),考察一下 \(E(\text{sum}_i)\)\(E(\text{ans}_i)\) 的关系。对 \(b_{n+1}\) 的大小讨论:

  • \(b_{n+1}\)\(b''_{[1,i]}\) 中,那它需要被删去并加进来一个 \(b''_{i+1}\)\(b_{n+1}\)\(i\) 种排名,于是这种情况会产生贡献 \(E(E(\text{sum}_{i+1})-b_{n+1}))=E(\text{sum}_i)-E(b_{n+1})\)
  • \(b_{n+1}\) 不在 \(b''_{[1,i]}\) 中,那这时期望依旧是 \(E(\text{sum}_i)\),共 \(n-i+1\) 种排名,会产生 \(E(E(\text{sum}_i))=E(\text{sum}_i)\) 的贡献。

枚举 \(b_{n+1}\) 的排名 \(j\)(即 \(b''_j=b_{n+1}\))可以得到:

\[\begin{aligned} E(\text{ans}_i)&=\dfrac{(n-i+1)\cdot E(\text{sum}_i)+\sum\limits_{j=1}^i E(\text{sum}_{i+1})-\sum\limits_{j=1}^iE(b''_j)}{n+1}\\ &=\dfrac{(n-i+1)\cdot E(\text{sum}_i)+i\cdot E(\text{sum}_{i+1})-E(\text{sum}_i)}{n+1}\\ &=\dfrac{(n-i)\cdot E(\text{sum}_i)+i\cdot E(\text{sum}_{i+1})}{n+1} \end{aligned} \]

于是现在就考虑如何计算 \(E(\text{sum}_i)\)

可以得到:

\[\begin{aligned} E(\text{sum}_i)&=\sum\limits_{j=1}^iE(b''_j)\\ &=\sum\limits_{j=1}^i\sum\limits_{x=1}^mP(b''_j\ge x)\\ &=\sum\limits_{j=1}^i\sum\limits_{x=1}^mP\left(\sum\limits_{k=1}^{n+1}[b_k<x]<j\right)\\ &=\sum\limits_{j=1}^i\sum\limits_{x=1}^m\sum\limits_{t=0}^{j-1}P\left(\sum\limits_{k=1}^{n+1}[b_k<x]=t\right)\\ &=\sum\limits_{j=0}^{i-1}(i-j)\sum\limits_{x=1}^mP\left(\sum\limits_{k=1}^{n+1}[b_k<x]=t\right)\\ \end{aligned} \]

\(f_i=\sum\limits_{x=1}^mP\left(\sum\limits_{k=1}^{n+1}[b_k<x]=i\right)\),那么 \(E(\text{sum}_i)=\sum\limits_{j=0}^{i-1}(i-j)f_j\)。于是可以得到:

\[\begin{aligned} E(b''_i)&=E(\text{sum}_i)-E(\text{sum}_{i-1})\\ &=\sum\limits_{j=0}^{i-1}f_j\\ &=E(b''_{i-1})+f_{i-1} \end{aligned} \]

那么现在就考虑如何求 \(f_i\)

先枚举选择 \(j\) 个在 \([1,x)\) 范围的数,然后容斥,钦定至少 \(t\)\(b_k\ge x\)。然后现在要算出这样的方案数。这是有界插板法,可以得到:

\[f_i=\dfrac{\binom{n+1}i}{\binom mn}\sum\limits_{t=0}^i(-1)^t\binom it\sum\limits_{x=0}^{m-1}\binom{m-(n+1-j+t)x}n \]

最内部的组合数可以枚举倍数预处理计算,时间复杂度 \(O(m\log n+n^2)\)

*暴力搜索

2025.11.18 OIFC

朝花夕拾 *1900

给定一个 \(n\)\(m\) 边的简单无向连通图。初始所有点均为白色,每次操作等概率地选择一个白色点,并将其染黑。若某个点的所有邻居均为黑色,则该点自动变为黑色。求期望操作次数。对 \(998244353\) 取模。

\(1\le n,m\le 3\times10^5\)

1s 256MB

首先是经典套路,将「在限制内选择」变成「初始随机一个排列,依次选择」,然后能操作则操作。那么我们相当于是要求期望的有效操作次数。根据期望的线性性,即求每个点被操作的概率之和。点 \(i\) 被自动染黑当且仅当它在排列中排在所有邻居的后面,那么反过来就有 \(1-\dfrac{1}{\deg_i+1}=\dfrac{\deg_i}{\deg_i+1}\) 的概率需要手动染黑。于是答案即为 \(\sum\limits_{i=1}^n\dfrac{\deg_i}{\deg_i+1}\),时间复杂度 \(O(n)\)

平行线 *2200

给定一个 \(1\sim n\) 的排列 \(a\) 和常数 \(k\),执行如下操作,直到 \(a\) 升序。

  • 依次对于 \(i=1,2,\cdots,n-k+1\),若 \(a_i,a_{i+1},\cdots,a_{i+k-1}\) 不是升序的,则花费 \(1\) 的代价将其升序排列。

求操作结束后所花费的代价。

\(1\le t\le 10\)\(2\le k\le n\le 2\times10^5\)\(1\le a_i\le n\)

1s 256MB

从某一轮开始,将 \(a_{[1,k]}\) 升序排序后,中间扫到的某个区间 \([i,i+k-1]\),一定有 \([i,i+k-2]\) 是升序的,因此相当于是将 \(a_{i+k-1}\) 插入到这个区间内。

于是可以考察每个数向前插入的次数。设 \(c_i=\sum\limits_{j=1}^{i-1}[a_j>a_i]\)。那么对于区间 \([i,i+k-1]\)\(a_{i+k-1}\) 会向前移动 \(\min(c_{i+k-1},k-1)\) 个位置。也就是说,对于初始的 \(a_i\),它需要跳 \(\left\lceil\dfrac{c_i}{k-1}\right\rceil\) 抡才能结束。使用 BIT 维护即可。注意如果某几个数同时跳到 \([1,k]\),他们可以一起排序,这个特判一下。

时间复杂度 \(O(n\log n)\)

*孤独之中神的祝福

*Back to Basics

2025.11.20 OIFC

  • 理想得分:100+100+28+0
  • 期望得分:100+0+28+0
  • 实际得分:100+0+28+0

休息时间 *1800

给定一个长度为 \(n\) 的正整数序列 \(a\),有长度为 \(k\) 的区间 \([p,p+k]\),初始 \(p=p_0\)。现在需要重排 \(a\),然后依次对于 \(i=1,2,\cdots,n\),执行:

  • \(a_i\in[p,p+k]\),则将 \(a_i\) 标记。
  • \(a_i<p\),则执行 \(p\gets p-1\)
  • \(a_i>p+k\),则执行 \(p\gets p+1\)

最大化被标记的数的个数。

\(1\le n\le 10^6\)\(0\le a_i,k,p_0\le 10^9\)

2s 1000MB

显然最优决策一定是区间向左后向右,或者向右后向左。于是枚举最先向左或向右达到的位置,然后可以二分和双指针得到另一侧可以达到的最远位置。时间复杂度 \(O(n\log n)\)\(O(n)\)

兼职时间 *2500

给定一个长度为 \(t\) 的环,环上整点依次用 \([0,t)\) 编号。有 \(m\) 个区间 \([l_i,r_i)\),若 \(l_i>r_i\) 则实际表示区间 \([l_i,t)\cup[0,r_i)\)\(q\) 次询问,每次询问给定 \(n\) 个初始位置分别在 \(x_1,x_2,\cdots,x_n\) 的标记。现在可以在任意实数时刻选择至多一个区间,当前被选择的区间内的标记均不会移动,未被区间包含的标记均为以 \(1\) 的速度顺时针移动。最小化将所有标记聚集到一点所花费的时间。

\(1\le m\le 10^5\)\(1\le t\le 5000\)\(2\le n\le t\)\(\sum n\le 10^5\)\(0\le l_i,r_i<t\)\(l_i\neq r_i\)\(x_i\) 严格递增。

4s 2000MB

\(n\) 个标记聚到一起等价于有一个 \(x_i\) 追上了 \(x_{i+1}\)。于是问题等价于求任意一个 \(x_i\) 追上 \(x_{i+1}\) 的最小时间(约定 \(x_{n+1}=x_1\))。

对于某一对 \((x_i,x_{i+1})\) 的策略为,只要有一个区间包含 \(x_{i+1}\) 且不包含 \(x_i\),就一直选定它直到 \(x_i\) 进入该区间。于是可以直接 dp,设 \(f_{i,j}\) 表示一对 \((i,j)\) 的答案,可以直接写记搜。时间复杂度 \(O(m+t^2+\sum n)\)

当你的天空突然下起了大雨 *2600

给定一棵 \(n\) 个点的以 \(1\) 为根的树,和一个长度为 \(m\) 的非负整数序列 \(a\)。初始所有节点均为白色,依次对于 \(i=1,2,\cdots,m\),顺序执行:

  • \(i=1\),则将节点 \(1\) 染黑;否则将所有父亲被染黑的白色节点染黑。
  • \(a_i\neq0\),则将以 \(a_i\) 为根的子树内的节点全部染白;否则不操作。

对于每个节点,求在这 \(m\) 个过程结束时,它是黑色的过程数。

\(1\le n,m\le 10^6\)\(0\le a_i\le n\)\(a_i\neq 1\)

2s 500MB

考虑对每个节点维护一个长度为 \(m\) 的 01 串,表示每个过程结束时节点是否为黑色。那么一个节点 \(i\) 的 01 串相较于父亲的串,需要将每个极长 1 段开头的 1 变为 0,同时将所有 \(a_p=i\) 的位置 \(p\) 改为 0。答案即为每个节点中 1 的个数。将上述过程 dfs 的话,用栈维护撤销操作即可。

对于串中的每个极长 1 段的长度,都是关于深度的一次函数 \(y=-\text{dep}+b\)。于是需要维护这个 \(b\) 的增减及拆分。用 BIT 维护值域上 \(b\) 的个数即可。时间复杂度 \(O(n+m\log m)\)

*鹿鸣林间

2025.11.23 OIFC

  • 理想得分:100+100+100+100
  • 期望得分:100+100+0+100
  • 实际得分:100+100+0+100

世末积雨云 *1600

给定正整数 \(n,m\),求有多少种不同的长度为 \(n\) 的序列 \(a\),满足 \(a_i\in[0,m]\) 且所有 \([1,m]\)\(a\) 均出现奇数次。对 \(10^9+7\) 取模。

\(1\le m\le n\le 2000\)

1s 256MB

可以看作 \(a\) 初始全 \(0\)。显然可以得到的 dp 是,设 \(f_{i,j}\) 表示已经填了值域在 \([1,i]\) 的数,共填了 \(j\) 个对应的方案数。容易有:

\[f_{i,j}=\sum\limits_{k=0}^j[2\nmid k]\cdot f_{i-1,j-k}\cdot\binom{n-j+k}k \]

答案即为 \(\sum\limits_{i=1}^nf_{m,i}\)。时间复杂度 \(O(n^2m)\),但是改成刷表后只转移非零的位置是可以跑过去的。

其实还有一种更简单的 dp。设 \(f_{i,j}\) 表示,考虑了 \(a\) 的前 \(i\) 位,其中有 \(j\) 种数的出现次数是奇数。则有:

\[f_{i,j}=f_{i-1,j}+(j-1)f_{i-1,j-1}+(m-j-1)f_{i-1,j+1} \]

时间复杂度 \(O(mn)\)

纸花 *2000

有一个 \(1\sim n\) 的排列 \(p\),保证 \(p_1=1,p_n=n\)。有一个长度为 \(n-1\) 的非负整数序列 \(a\),令 \(a_i=\sum\limits_{i=1}^{n-1}[\min(p_i,p_{i+1})\le i\land\max(p_i,p_{i+1})>i]\)。现给定 \(a\),还原一种可能的 \(p\)。保证有解。

\(2\le n\le 2\times 10^5\)

1s 256MB

将排列看作链上的移动,则 \(a_i\) 代表着边 \((i,i+1)\) 被经过的次数。那么 \(a_i\) 肯定都是奇数。

考虑设 \(\text{sol}(l,r)\) 表示 \(a_{[l,r]}\) 对应的行走路径,其中 \(a_l=a_r\)。首先整个过程需要从 \(l\) 走到 \(r\),而所有 \(a_i>a_l\) 的位置是需要我们回过去走的。考虑找到 \([l,r]\) 内所有 \(=a_l\) 的位置 \(p_1,p_2,\cdots,p_k\)。那么就分别需要在每个区间 \((p_i,p_{i+1})\) 内往回走,即 \(\text{sol}(l,r)=\{p_1,\text{sol}(p_1+1,p_2-1),p_2,\text{sol}(p_2+1,p_3-1),\cdots,p_k,\text{sol}(p_{k-1}+1,p_k-1)\}\)\(p\) 可以链表预处理出来,时间复杂度 \(O(n)\)

人生来就形只影单 *2500

给定一个 \(n+1\) 个点的图,其中对于点 \(i\in [0,n-1]\),它会连向点 \((i+1)\bmod n\)。同时所有 \(\text{popcount}(i)\) 为奇数的都会和点 \(n\) 连边。求断掉若干条边(可以不断)后图依旧连通的方案数。对 \(10^9+7\) 取模。

\(3\le n\le 10^{18}\)

1s 256MB

考虑最终保留的和 \(n\) 相连的边,相邻两边之间的环边至多会断掉一条。于是设 \(f_{i,0/1,0/1}\) 表示考虑了前 \(i\) 条环边,第一条和最后一条连向 \(n\) 的边是否断开对应的方案数。这样做的时间复杂度为 \(O(n)\)

用矩阵加速。设 \(M_{i,0/1}\) 表示 \([0,2^i)\) 的答案,有 \(M_{i,j}=M_{i-1,j}M_{i-1,1-j}\)。将 \(n\) 变为二进制 \(\sum\limits2^{a_i}\),则答案为 \(\prod M_{a_i,(i-1)\bmod 2}\)。时间复杂度 \(O(\log n)\)

参考答案:略 *2200

\(n\) 个物品和两个栈,要求第 \(i\) 个物品在 \(a_i\) 时刻进入某个栈,并且要恰好在 \(b_i\) 时刻时该栈栈顶为 \(i\),并出栈。构造一种给所有物品安排进入的栈的方案。保证有解。

\(1\le n\le 10^6\)\(1\le a_i,b_i\le 2n\)\(a,b\) 构成一个 \(1\sim 2n\) 的排列。

3s 256MB

两个物品 \(i,j\ (a_i<a_j)\) 不能在同一个栈当且仅当 \(a_i<a_j<b_i<b_j\)。那么可以考虑将 \((i,j)\) 连边,最后跑一个二分图染色即可。

直接连边显然不行。但是考虑,假设 \(i\) 已经对集合 \(S\) 内的点分别连边,那么后续只需要给 \(S\) 内的一个元素连边就可以确定颜色。于是用 set 维护连续段即可。时间复杂度 \(O(n\log n)\)

2025.11.24 OIFC

  • 理想得分:100+100+60+48
  • 期望得分:100+0+0+32
  • 实际得分:100+0+0+32

传送门 *2400

\(k+1\) 行,每行有 \(n\) 个房间。有 \(k\)\(1\sim n\) 的排列 \(p_1\sim p_k\)。从第 \(i\) 行的第 \(j\) 个房间可以走到第 \(i+1\) 行的第 \(p_{i,j}\) 或第 \(p^{-1}_{i,j}\) 个房间。构造这 \(k\) 个排列,使得第 \(1\) 行的任意点可以到达第 \(k+1\) 行的任意点。保证有解。

\(3\le n\le 1000\)\(\lceil\log_2n\rceil+1\le k\le 1000\)

1s 512MB

观察 \(k\) 的下界,意味着每一层行走都需要将可达点数量 \(\times 2\)

容易猜到一种 \(p_{i,j}=((j+2^{i-1}-1)\bmod n)+1\) 的构造,初始在 \(x\) 的话,可以到达 \(x-C+\{2,4,\cdots,2^k\}\)。如果 \(n\) 是奇数的话那就对了,然而偶数的时候只能到达相同奇偶性的地方。

考虑一开始的时候改变奇偶性。可以将 \([1,n]\) 每四个划分成一组,对于一组 \((i,i+1,i+2,i+3)\),分别连向 \((i+2,i,i+3,i+1)\)。如果 \(n\bmod4=2\),那就需要从开头和从结尾各每四个进行划分,这样可以保证每个数都走到不同奇偶性的位置上。这样最多 \(2\) 步并且还到达了 \(4\) 个点。再做上面的构造即可。

时间复杂度 \(O(nk)\)

岁月 *2600

给定正整数 \(k\) 和长度为 \(n\) 的非负整数序列 \(a\),其中 \(a_i\in[0,2^k)\),且 \(a_i\le a_{i+1}\)

定义:

\[\begin{aligned} c(n,x)&=\max\limits_{i=0}^x\{n\oplus i\}\\ f(n,x)&=\max\limits_{i=1}^n\{c(a_i,x)\}\\ g(n,x)&=\sum\limits_{i=1}^n[c(a_i,x)=f(n,x)] \end{aligned} \]

\(\left(\sum\limits_{x=0}^{2^k-1}f(n,x)\right)\bmod2^{64}\)\(\left(\sum\limits_{x=0}^{2^k-1}g(n,x)\right)\bmod 2^{64}\)

\(1\le n\le 5\times10^6\)\(0\le k<64\)\(0\le a_i<2^k\)

1s 512MB

显然有 \(f(n,x)=c(a_n,x)\)。那么对于第一问可以将贡献按位划分成若干个 \([0,2^k)\) 的前缀(可以放到 01-trie 上看),可以求得答案。

对于第二问,首先有 \(g(n,x)=\sum\limits_{i=1}^n[c(a_i,x)=f(n,x)]=\sum\limits_{i=1}^n[c(a_i,x)=c(a_n,x)]\)。对于每个 \(x\),满足条件的 \(a_i\) 是一个后缀。考虑枚举 \(x\) 从高位到低位的状态,找到匹配贴着上界的和自由位对应的两个区间,可以双指针完成。时间复杂度 \(O(n+k)\)

*流星雨

安全 *2800

给定一棵 \(n\) 个点带边权(\(w\))的无根树,初始依次加入 \(m\) 个安全设施,有参数 \((p_i,k_i)\),表示它位于节点 \(p_i\),并且会保护到该节点的距离 \(\le k_i\) 的点。\(q\) 次操作:

  • \(\texttt1\ p \ k\):加入一个参数为 \((p,k)\) 的安全设施。
  • \(\texttt2\ x\):移除第 \(x\) 个加入的安全设施,保证该设施目前存在。
  • \(\texttt3\ u\ v\):查询节点 \(u\)\(v\) 间的路径上的节点是否均被保护。

\(1\le n,m,q\le 5\times10^5\)\(1\le w\le 100\)\(1\le k\le 10^8\)

4s 512MB

考虑树剖,考虑一个安全设施 \((p,k)\) 所在的那条重链上,那么它影响到的就是一个链上的区间。然后往上跳到 \(p'=\text{fa}_{\text{top}_p}\),在这里放置一个等效的安全设施,参数为 \((p',k'=k-\text{dis}(p,p'))\),将重链上的点二分出覆盖的区间,并更新每个点的被覆盖次数。往上以此类推。注意这里没有处理重链上轻子树的点,但是这些点在后续查询时会跳上来,依然会被计算。

查询 \((u,v)\) 时考虑分别计算 \((u,\text{lca}(u,v))\)\((v,\text{lca}(u,v))\)。依旧往上跳,首先跳到根,在这些所有可能会影响到 \(u,v\) 的安全设施中找到影响最大的,即 \(\max\limits_{p'}\{k'-|s_u-s_{p'}|\}\),其中 \(s_i\)\(i\) 到根路径的权值和,这个可以拆开绝对值后用线段树做单修区查。然后再在到 lca 的重链上依次检查。时间复杂度 \(O(q\log^2n)\)

2025.11.25 OIFC

  • 理想得分:100+28+100+24
  • 期望得分:100+8+55+0
  • 实际得分:100+4+60+0

种花 *1600

给定一个 \(n\times m\) 的 01 矩阵,求全 0 的子矩形个数,对 \(998244353\) 取模。

\(1\le n,m\le 1000\)

1s 512MB

考虑计算以某个位置为右下角的矩形数量,按列扫过去可以用单调栈维护贡献。时间复杂度 \(O(nm)\)

*喵了个喵

建造军营 *2600

给定一棵 \(n\) 个点的带权(\(w\))无根树,有 \(m\) 个互不重合的关键点初始分别位于 \(a_i\),每个关键点会覆盖到其距离 \(\le k\) 的点。现在将每个关键点分别调整到 \(a'_i\),需要花费 \(\sum\limits_{i=1}^m\text{dis}(a_i,a'_i)\) 的代价,并要求每个点都被某个关键点覆盖,最小化代价。

\(1\le a_i\le n\le 5000\)\(1\le m\le\min(n,100)\)\(1\le k\le\min(n-1,100)\)\(1\le w\le 10^9\)

2s 512MB

考虑 dp。设 \(f_{x,i,t}\) 表示 \(x\) 子树内最终放了 \(i\) 个关键点,且最近未被关键点覆盖的点到 \(x\) 的距离为 \(t\) 的最小代价;\(g_{x,i,t}\) 表示 \(x\) 子树内最终放了 \(i\) 个关键点,且离 \(x\) 最近的关键点距离为 \(t\) 的最小代价。

\(i\) 子树原本的关键点数为 \(c_i\)\(x\) 的某个儿子 \(y\) 和其的连边 \((x,y)\) 的边权为 \(w\),那么如果 \(y\) 子树最终有 \(j\) 个关键点,就会产生 \(v=|c_y-j|\cdot w\) 的贡献。那么可以做树上背包,讨论这个 \(t\) 可以得到转移:

\[\begin{aligned} f'_{x,i+j,t}&\overset{\min}{\gets}f_{x,i,t}+g_{y,j,t}+v\\ g'_{x,i+j,t}&\overset{\min}{\gets}g_{x,i,t}+g_{y,j,t}+v\\ f'_{x,i+j,t}&\overset{\min}{\gets}f_{x,i,t}+\min(f_{y,j,t+1},g_{y,j,t+1})+v\\ g'_{x,i+j,t}&\overset{\min}{\gets}g_{x,i,t}+\min(f_{y,j,t+1},g_{y,j,t+1})+v\\ g'_{x,i+j,t}&\overset{\min}{\gets}\min(f_{x,i,t},g_{x,i,t})+g_{y,j,t-1}+v \end{aligned} \]

时间复杂度 \(O(nmk)\)

比赛 *2800

给定长度为 \(n\) 的整数序列,\(q\) 次查询 \([l,r]\),求其所有子区间的最大子段和之和。对 \(2^{64}\) 取模。

\(1\le n,q\le 2.5\times10^5\)\(1\le l\le r\le n\)\(0\le |a_i|\le 10^9\)

2s 1GB

首先套路地离线询问,按右端点从左到右扫描,维护每个左端点对应的历史和。

\(\text{sum}_i=\sum\limits_{j=1}^ia_j\)。假设当前扫描到 \([1,i]\),固定最大子段和的左端点 \(l\) 时,相当于要求 \(\text{sum}_l-\min\limits_{r=l}^{i}\{\text{sum}_r\}\)。考虑单调栈维护 \(\text{sum}_i\) 的前缀 \(\min\)。然后对应地在线段树上更新即可。时间复杂度 \(O((n+q)\log n)\)

2025.11.27 OIFC

*异或

心 *2400

给定一棵 \(n\) 个点的树,断开任意条边所得到的森林,其权值为每个连通块重心个数的乘积。求所有 \(2^{n-1}\) 种断边方案所得到的权值之和。对 \(998244353\) 取模。

\(1\le n\le 5000\)

2s 512MB

一棵树的重心个数只能是 \(1\)\(2\),并且如果个数为 \(2\) 必然相邻,且这条边两侧的子树大小相同。那么乘积可以看作在每个连通块内是否选择了这样的一条边。

于是 dp。设 \(f_{x,i}\) 表示以 \(x\) 为根的连通块大小为 \(i\),当前还没有选出这样一条边的方案数;\(g_{x,i}\) 表示已经选出了这样一条边,且这条边两侧子树大小之差为 \(i\) 的方案数。然后就可以做树上背包了。设 \(\text{ans}_i\) 表示 \(i\) 子树的答案,\(y\)\(x\) 的某一个儿子,枚举 \(x,y\) 的连通块大小 \(i,j\),那么可以得到如下这些转移式子:

\[\begin{aligned} f'_{x,i}&\overset{+}{\gets}f_{x,i}\cdot\text{ans}_y\\ g'_{x,i}&\overset{+}{\gets}g_{x,i}\cdot\text{ans}_y\\ f'_{x,i+j}&\overset{+}{\gets}f_{x,i}\cdot f_{y,j}\\ g'_{x,i-j}&\overset{+}{\gets}g_{x,i}\cdot f_{y,j}\\ g'_{x,j-i}&\overset{+}{\gets}f_{x,i}\cdot(f_{y,j}+g_{y,j})\\ \text{ans}_i&=g_{x,0}+\sum\limits_{i=0}^{\text{sz}_x}f_{x,i} \end{aligned} \]

时间复杂度 \(O(n^2)\)

青鸟 *2400

给定一个 \(n\)\(m\) 边的有向图,问有多少种加边方案(可以加重边、自环)使得从 \(1\) 开始任意走总能经过有限步到达 \(n\)

\(1\le n\le 5\times 10^4\)\(1\le m\le 10^5\)

3s 512MB

首先删去 \(n\) 的所有出边,那么可以容易得到合法的判定:\(1\) 不能走到环,且所能到达的所有点中除了 \(n\) 以外出度均要 \(>0\)

要看图的可达性那直接大力 bitset 就好了。

考虑如何进行加边,对图的形态讨论:

  • 若除了 \(n\) 以外 \(1\) 所能到达的出度为 \(0\) 的点不少于两个,或 \(1\) 初始可以走到环,则无解。
  • 若除了 \(n\) 以外还存在一个 \(1\) 可达的出度为 \(0\) 的点,那么加的边起点一定是该点,而其重点需要满足能走到 \(n\) 且走不到其他出度为 \(0\) 的点。
  • 否则的话 \(1\) 一开始就能到达 \(n\),讨论加的边的起点:
    • 若起点 \(1\) 不可达,则终点任意。
    • 若起点恰为 \(n\),则终点任意。
    • 若起点 \(1\) 可达,则终点需要保证其可达 \(n\) 且不可达其他出度为 \(0\) 的点,以及不可达起点。

时间复杂度 \(O\left(\dfrac{n^2}w\right)\)

*开车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/981763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fix-broken-img:零依赖的图片优雅降级解决方案

在现代 Web 开发中,图片加载失败是一个常见但容易被忽视的问题。今天我要介绍一个我最近开源的解决方案——`fix-broken-img`,一个零依赖的 WebComponents 组件,专门用于处理图片加载失败时的优雅降级。fix-broken-…

2025年知名的四面弹衬布/服装衬布厂家推荐及选择指南

2025年知名的四面弹衬布/服装衬布厂家推荐及选择指南行业背景与市场趋势随着全球服装产业的持续发展,服装衬布作为重要的辅料产品,其市场需求呈现稳定增长态势。根据行业报告,2023年全球服装衬布市场规模已达到约85…

2025年质量好的储能微粒子感烟火灾探测器/冷库感烟火灾探测器优质厂家推荐榜单

2025年质量好的储能微粒子感烟火灾探测器/冷库感烟火灾探测器优质厂家推荐榜单行业背景与市场趋势随着我国新能源产业的高速发展和冷链物流行业的持续扩张,储能电站和冷库的安全防护需求日益凸显。据行业统计数据显示…

2025年知名的饮料标签厂家推荐及选择参考

2025年知名的饮料标签厂家推荐及选择参考行业背景与市场趋势随着全球饮料市场的持续增长,预计到2025年市场规模将达到1.8万亿美元。在这一背景下,饮料标签作为产品包装的重要组成部分,不仅承担着信息传递、品牌展示…

2025年市面上全屋定制家居/全屋定制电视柜实力排行榜

2025年市面上全屋定制家居/全屋定制电视柜实力排行榜行业背景与市场趋势随着消费者对居住环境个性化需求的不断提升,全屋定制家居行业在2025年迎来了新一轮的增长期。据市场调研数据显示,中国全屋定制市场规模已突破…

【URP】Unity[内置Shader]非光照Unlit

URP内置Unlit Shader的作用与原理 Unlit Shader是Unity通用渲染管线(URP)中的基础着色器,主要用于渲染不受光照影响的物体。其核心原理是通过直接采样纹理或颜色值输出到屏幕【从UnityURP开始探索游戏渲染】专栏-直达…

使用esp_idf后的idf.py set-target esp32s3不能设置目标芯片的一个原因?

1)visual studio code报了一个错误,以下为错误内容: Failed to set target esp32s3: non zero exit code 2CMakeLists.txt not found in project directoryC:\Users\sf\Desktoplesp\esp_eda Adding "set-target…

2025年11月上海春笋装饰办公室 商铺装修案例集锦 + 官方联系方式全解析:从双场景实景到高效对接指南

2025年11月上海春笋装饰办公室 & 商铺装修案例集锦 + 官方联系方式全解析:从双场景实景到高效对接指南上海春笋装饰作为上海双场景装修标杆品牌(中国装饰百强 “上海嘉春装饰” 全资子品牌),以 “10-25 天快装…

2025年热门的钢板预处理线厂家最新推荐权威榜

2025年热门的钢板预处理线厂家推荐权威榜行业背景与市场趋势随着全球制造业的持续升级和环保要求的不断提高,钢板预处理线作为金属加工领域的关键设备,正迎来新一轮的技术革新和市场扩张。2025年,预计全球钢板预处理…

原型开发的价值

《程序员修炼之道》强调了原型开发的重要性。原型不同于最终产品,它的目的是验证想法、测试方案、回答特定问题。通过构建快速原型,我们可以在投入大量资源之前,发现设计中的缺陷和风险。 书中指出,原型应该聚焦于…

破窗效应的启示

书中关于"破窗"理论的讨论让我印象深刻。作者认为,一个微小的破窗(如代码中的小问题、设计上的小缺陷)如果不及时修复,就会传递出"这里不需要维护"的信号,导致更多更大的问题出现。 这种效应…

2025年中国十大源头自粘壁纸厂家推荐:自粘壁纸正规供应商、

本榜单依托全维度市场调研与真实行业口碑,深度筛选出十家在自粘壁纸领域具备研发、生产、供应全链路能力的标杆企业,为装修公司、家居卖场、跨境贸易商等精准匹配适配的源头供应伙伴,助力降本增效。TOP1 推荐:江苏…

2025年热门的高密度硬质棉厂家实力及用户口碑排行榜

2025年热门的高密度硬质棉厂家实力及用户口碑排行榜行业背景与市场趋势随着全球环保意识的提升和消费者对健康生活品质的追求,高密度硬质棉作为新型环保填充材料,近年来在家居、工业及特殊应用领域获得了快速发展。相…

11.24 resultset SQL注入,preparestatement

next(),光标移到下一行并询问该行是否为有效行 getXxx(t)t="要查的关键字",标号; SQL注入:在输入密码时使用特殊的sql语句从而直接进入账户 prepare statement用来防止SQL注入

20232323 2025-2026-1《网络与系统攻防技术》实验七实验报告

1.实验内容及要求 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特…

STM32回调函数使用/定时器/GPIO/串口/ - 教程

STM32回调函数使用/定时器/GPIO/串口/ - 教程2025-11-30 11:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

2025年质量好的高精度印染配件圆网闷头厂家推荐及选择指南

2025年质量好的高精度印染配件圆网闷头厂家推荐及选择指南行业背景与市场趋势随着全球纺织印染行业的持续发展,高精度印染配件市场需求呈现稳定增长态势。作为印染机械中的关键部件,圆网闷头的质量直接影响印染工艺的…

2025年广东机械设备源头厂家排行榜,10大精选企业推荐

为助力制造企业高效锁定适配工业智能升级需求的机械设备合作伙伴,避免选型走弯路,我们从技术硬核度(如核心算法自主化、精度稳定性)、产品适配性(多场景柔性生产能力)、全周期服务质量(售后响应时效、定制化方案…

对DRY原则的理解

阅读《程序员修炼之道》中关于DRY(不要重复自己)原则的章节,我意识到这个原则的核心在于"每一处知识都必须在系统中有单一、明确、权威的表述"。这不仅仅是表面上的代码重复问题,更重要的是对系统中各种…

2025年质量好的气动阀门热门厂家推荐榜单

2025年质量好的气动阀门热门厂家推荐榜单行业背景与市场趋势随着工业自动化水平的不断提升,气动阀门作为流体控制系统的关键部件,在石油化工、电力、冶金、制药等领域的应用日益广泛。2025年,全球气动阀门市场规模预…