[ARC126]Editorial

这场比赛打得是真的废物,\(\rm T3\) 判断后的性质在 \(\rm 10min\) 过去之后才想到......\(\rm T4\) 又来一个交换相邻项的简单状压 \(\rm DP\),结果这我也不会做......我的 \(\rm DP\) 功底是真的垃圾啊......


Problem A. Make 10

长度为 \(3\) 的显然要两个两个用,于是我们可以先将长度为 \(3\) 的绑在一起,然后发现我们现在的棒子都是偶数,于是全部长度除以 \(2\),那么我们目标就是合成长度为 \(5\) 的棒子。

记长度为 \(1,2,3\) 的棒子数量分别为 \(a,b,c\).

显然,\(1\) 棒子是最灵活的,于是我们的组合应尽可能较少地使用 \(1\) 棒子,大概处理一下,发现我们有以下几种组合方式:

  1. \(5=2+3\)
  2. \(5=1+2+2\)
  3. \(5=1+1+3\)
  4. \(5=1+1+1+2\)
  5. \(5=1+1+1+1+1\)

别有用心地将使用 \(1\) 棒子个数排序。我们直接按这种顺序放就行了。

\(\mathcal{Submission\;Link}\).


Problem B. Cross-free Matching

两个不交叉,事实上就是 \(\nexists i,j\;\text{s.t.}\;a_i<a_j\land b_i>b_j\),一般情形下,我们处理的都是 \((1,b_1),(2,b_2),(3,b_3)\cdots\),在这种情况下,我们只需要按照 \(a_i\) 排序即可对 \(b_i\) 使用同样的处理,不过一个比较特殊的点是对于 \(a_i=a_j\) 的情形,我们必须对于这种情况,按照 \(b_i>b_j\) 进行排序,因为同一个 \(a_i\) 我们只能选择一条线段。

\(\mathcal{Submission\;Link}\).


Problem C. Maximize GCD

\(\max a_i\overset\Delta=A\),那么,如果 \(\sum A-a_i<k\),那么显然可以将所有数都先拔高到 \(A\),然后再整体增加,不难发现这样肯定是最优的。

如果 \(\sum A-a_i\ge k\),那么 \(\gcd\) 一定在区间 \([1,3\times 10^5]\) 中,我们枚举这个 \(\rm gcd\),然后看每个区间 \([ti,(t+1)i)\) 中的数全部都拔高到 \((t+1)i\) 的花费即可。听上去挺暴力,然而这是调和级数,复杂度 \(\mathcal O(n\ln n)\).

\(\mathcal {Submission\;Link}\).


Problem D. Pure Straight

对于一个互不序列,如果只能交换相邻两项,对其进行排序,交换次数是 \(\sum D_i\) 的。

\(\sf closestool\) 指出一个十分重要的性质 —— 我们选出的数中,一定会有一个是待在原位的。

于是,我们可以设计状态 \(f(i,s,0/1)\) 表示当前到位置 \(i\),选出的数集为 \(s\),是否已经确定了那个固定点。

转移很简单,就不多说了,复杂度 \(\mathcal O(n2^k)\).

\(\mathcal {Submission\;Link}\).


Problem E. Infinite Operations

显然经过无限次操作之后,所有数都会变成 \(\overline x\),于是我刚开始十分天真地以为我们只需要维护

\[\sum |x-\overline x| \]

就行了......后来发现无法过样例,于是发现了一个东西,似乎两个数在 \(\overline x\) 的同一边,它们两个合并可以 “无中生有”,就是 \(\sum |x-\overline x|\) 没变,但是 \(\sf DDG\) 得分了。然后我就不会了。

题解确实很妙,由于最后与数字顺序无关,我们不妨先将 \(x\) 排序,然后设势能函数 \(\Phi=\sum_{i<j} |x_i-x_j|\),接下来我们考察对不同的数操作会将答案如何变化:

  • 若操作 \(x_i,x_{i+1}\),那么 \(\Phi'=\Phi-(x_{i+1}-x_i)\),并且 \(\sf DDG\) 得了 \(\frac{x_{i+1}-x_i}{2}\) 分;
  • 若操作 \(x_i,x_j(j-i>1)\),那么 \(\Phi'<\Phi -(x_j-x_i)\),并且 \(\sf DDG\) 得分 \(\frac{x_j-x_i}{2}\)

显然,我们只用第一个操作可以让 \(\sf DDG\) 得大分,再分析一下为什么第二个操作不好:因为这两数会向 \(i,j\) 中间的数字靠拢,使得这些差值变小,但是这部分并没有得分。

当我们只用第一个操作,那么 \(\sf DDG\) 得分就是 \(\frac{\Phi}{2}\),我们只需要动态维护 \(\Phi\) 就行了。其实并没有必要用到平衡树,一棵权值线段树就可以搞定了。复杂度 \(\mathcal O(n\log x)\).

\(\mathcal{Submission\;Link}\).


Problem F. Affine Sort

最开始洛一发把我搞傻了,这能洛就算了,上面用有限积分求导,下面用常函数求导,两个不同求导法则居然可以拼在一起洛我直接变成大傻逼。

其他地方题解说得挺清楚,就去这里看吧。另,代码我也不想打了。果然我是大懒狗。

posted @ 2021-10-02 16:40  Arextre  阅读(198)  评论(2编辑  收藏  举报