Solution
A
对于第 xxx 轮,我们将所有满足 i+j≡x(modn−1)i+j \equiv x \pmod {n-1}i+j≡x(modn−1) 的 (i,j)(i,j)(i,j) 配对。注意这里 i,ji,ji,j 的下标均从 000 开始。
但是这样会导致一些数无法配对,例如当 n=6,x=2n=6,x=2n=6,x=2 时,000 已经和 222 配对了,那么 555 就无法和 222 配对了。同时,111 无法与它自己配对,所以最终会剩下 5,15,15,1 未配对。
由于每一轮中会有恰好两个未匹配的数,所以将这两个未匹配的数匹配起来即可。
B
算法一
考虑状压 dp\text{dp}dp。
令 fi,sf_{i,s}fi,s 表示,看到第 iii 行,且第 iii 行中已匹配的点集为 sss。
转移的时候,我们先进行内部修改(例如,找到 sss 中的某两个连续的 000,将它们全部修改为 111 得到 s′s's′,那么 fu,sf_{u,s}fu,s 可以转移到 fu,s′f_{u,s'}fu,s′),然后对下一行产生贡献(下一行与上一行的连接部分必然是 sss 的补集的子集)。
时间复杂度 O(n3m)O(n3^m)O(n3m),可以优化为 O(n2m)O(n2^m)O(n2m)。
算法二
考虑网络流。
建立源点 SSS 与汇点 TTT,给矩阵中的每个点一个编号 ppp。我们可以按如下方式建图:
-
∀i,j\forall i,j∀i,j,连边 (S,pi,j,1,0)(S,p_{i,j},1,0)(S,pi,j,1,0) 与 (pi,j,T,1,0)(p_{i,j},T,1,0)(pi,j,T,1,0)
-
∀i,j\forall i,j∀i,j,连边 (pi,j,pi,j+1,1,ai,j)(p_{i,j},p_{i,j+1},1,a_{i,j})(pi,j,pi,j+1,1,ai,j) 与 (pi,j,pi+1,j,1,bi,j)(p_{i,j},p_{i+1,j},1,b_{i,j})(pi,j,pi+1,j,1,bi,j)
注意,这里的 (u,v,f,c)(u,v,f,c)(u,v,f,c) 表示,连接了一条从 uuu 到 vvv,流量为 fff 且费用为 ccc 的边。
跑最小费用最大流即可。
C
算法一
考虑 q=1,l1=1,r1=nq=1,l_1=1,r_1=nq=1,l1=1,r1=n 如何处理。
若 (A,B,C)(A,B,C)(A,B,C) 是最优解,那么其中一个必要条件是: [A,B][A,B][A,B] 是一个两端高,中间低的区间,即 maxi=A+1B−1{ai}≤min(A,B)\max_{i=A+1}^{B-1} \{a_i\} \le \min(A,B)maxi=A+1B−1{ai}≤min(A,B)。换言之,若存在一个 [A+1,B−1][A+1,B-1][A+1,B−1] 中的 iii 使 ai>aAa_i>a_{A}ai>aA 或 ai>aBa_i>a_{B}ai>aB,则相应地将 AAA 或 BBB 换成 iii 后不劣。同时,C\text{C}C 必定是 [2B−A,n][2B-A,n][2B−A,n] 中 aaa 值最大的位置。
对于某一个 BBB 而言,AAA 必然是 BBB 之前第一个比 BBB 大的位置。因为,若将 AAA 向前移则不合法,若将 AAA 向后移则不优。
综上所述,我们枚举 BBB,得到对应的 AAA,查询 2B−A2B-A2B−A 处的后缀最大值 ccc,并将 c+aA+aBc+a_{A}+a_{B}c+aA+aB 更新答案即可。
时间复杂度 O(n)O(n)O(n)。
算法二
考虑正解。由于在线处理较为困难,我们将询问离线下来一起处理。
我们从右往左扫描,并对于每个位置 iii 维护 fif_ifi,表示当 C=iC=iC=i 时的最大 aA+aB+ai(B−A≤i−B)a_{A}+a_{B}+a_{i}(B-A \le i-B)aA+aB+ai(B−A≤i−B)。
当我们将 iii 向左移动一格后,fff 需要被进行更新。令此时 A=iA=iA=i 对应的 BBB 为 jjj,则 ∀k∈[2j−i]\forall k \in [2j-i]∀k∈[2j−i],有 fk:=max(fk,u+ak)f_k:=\max(f_k,u+a_k)fk:=max(fk,u+ak)。这里 u=ai+aju=a_i+a_ju=ai+aj。
对于一次形如 [l,r][l,r][l,r] 的查询,我们需要在 i=li=li=l 时立即查询 [l,r][l,r][l,r] 中的最大 fff 值。
现在,本题被我们转换为了一道纯数据结构题,考虑使用经典数据结构线段树来维护。
我们对于每一个线段树上的节点 [l,r][l,r][l,r],维护对 [l,r][l,r][l,r] 产生全局影响的最大 uuu,a[l,r]a[l,r]a[l,r] 的最大值以及 [l,r][l,r][l,r] 内的最大 fkf_kfk;同时,也要维护关于 uuu 的懒标记,需要适时下传并及时更新。
这里仅讨论节点信息的转移。为方便叙述,令当前所在节点为 xxx,左右儿子分别为 ls,rsls,rsls,rs,父亲节点为 fafafa;最大 uuu 为 tx,0t_{x,0}tx,0,a[l,r]a[l,r]a[l,r] 的最大值为 tx,1t_{x,1}tx,1 且最大 fkf_kfk 为 tx,2t_{x,2}tx,2,有
tx,0=max(tx,0,tx,fa)t_{x,0}=\max(t_{x,0},t_{x,fa})tx,0=max(tx,0,tx,fa)tx,1=max(tls,1,trs,1)t_{x,1}=\max(t_{ls,1},t_{rs,1})tx,1=max(tls,1,trs,1)tx,2=max(tls,2,trs,2,tx,0+tx,1)t_{x,2}=\max(t_{ls,2},t_{rs,2},t_{x,0}+t_{x,1})tx,2=max(tls,2,trs,2,tx,0+tx,1)
总复杂度 O(nlogn)O(n \log n)O(nlogn),本题被解决。
D
引理 1
对于任意不小于 666 的偶数,均可以拆分为两个奇质数之和。
引理 2
对于任意奇合数,均可以拆分为三个奇质数之和。
算法一
由于本题涉及到区间修改,考虑差分,则每次修改都是将两个 111 变成 000,不可能出现其他情况。特别的,对于针对 l,rl,rl,r 的一次 1→01 \to 01→0 的修改,其代价如下:
-
若 r−lr-lr−l 为奇质数,则消耗 111 步
-
若 r−lr-lr−l 为偶数,则消耗 222 步
-
若 r−lr-lr−l 为奇合数,则消耗 333 步
综上所述,我们对于每两个 111 连边,其权值为消耗的步数,则一般图最小权完美匹配即为答案。
算法二
考虑贪心——我们先让 111 的个数尽可能多,再让 222 尽可能多 ⋯⋯\cdots \cdots⋯⋯ 显然,这样是正确的。
于是我们先建立一个二分图,差为奇质数的点之间有边,然后跑最大匹配即可。现在,我们成功地让 111 的个数尽可能得多了,然后我们需要让 222 越多越好。
对于空余下来的点,我们将它们按照奇偶性分类,对于同一类中的点进行两两配对,从而我们让 222 的个数尽可能得多了。剩下未匹配的点之间连 333 即可。
总复杂度 O(n2+m)O(n^2+m)O(n2+m),这里 mmm 是最大的 XXX。
Summary&Evaluation
T1\text{T1}T1 这种题我很讨厌,但是既然遇到了,我就认真地做了一下,最后打表得到了 404040 分。
T2\text{T2}T2 是一道套路题,被我一眼切了,场上也是人均爆切,但有人被卡常了,我也不知道该说什么好了。
T3\text{T3}T3 是一道非常好的题,先挖掘性质,并离线用数据结构维护,考场上是真的想不到,一直在想前 logn\log nlogn 大必有一个的性质,结果只有 404040 分。
T4\text{T4}T4 在考场上选择了果断放弃,竟然连题目都没看。但题目还是挺不错的,思路非常妙。
综上所述,本场模拟赛难度大概是黄绿紫紫,相比 NOIP 第一题过难,第二三题正常,考察了数据结构、数学、dp\text{dp}dp 与构造,但是未考察图论。体验了不挂分的喜悦,不过分依然很低。

这篇博客探讨了图论算法在解决组合优化问题中的应用,包括最小费用最大流、动态规划和网络流。文章通过实例详细解析了算法一和算法二的实现,并分析了不同算法的时间复杂度。此外,还介绍了区间修改问题的解决方案,涉及差分和贪心策略,以及在实际比赛中的题目评价。
1196

被折叠的 条评论
为什么被折叠?



