1 条题解
-
0
自动搬运
来自洛谷,原作者为

Iniaugoty
我一定会进盐中校队!!!!!11111搬运于
2025-08-24 23:16:22,当前版本为作者最后更新于2025-05-19 08:44:43,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
如何
苏瞳速通 APIO 2025 Ag???很难不注意到只有 T3 是可做题,考虑把它过掉!考虑 的情况,显然当且仅当两直线垂直时最优。
考虑 的情况,显然答案会是一个平角,否则会出现四条不共线的直线。特别地,当有两条直线垂直时能取到:它们之间夹一个直角,而第三条线与它们产生一对互余的角。不过不是仅当,但这并不重要。

以上是两个基本的情形,下面将利用她们进行推广。
很难不发现最优解总是,直线两两垂直的配对起来(当然 为奇数时会有一个多出来的)。
如果你发现不了的话,考虑归纳 / 增量法构造。 时我们已经会了,利用 时的最优解推出 的。首先考虑加入第 条直线,出现了 个 的情形,发现随便加(甚至跟已有的重合)都行;再加入第 条直线,出现了 个 的情形与 个 ,前者没啥要求,后者只需要保持使其与第 条直线垂直即可。
那么有一个 naive 的想法是直接 配对,但这是错的。问题出在哪,发现题目要求每一步之后值都不降,这个东西随便手玩一下就能 hack 掉。
如图,直接让 3 来迁就 1 得到与其垂直的 3' 的话,它与 2 和 4 的夹角明显会变小,而这个减小的程度超过了与 1 夹角的增加。

考虑大胆地将 条直线排序一下,再 配对。然后你发现这甚至是对的。
如果是赛时,几乎就不用管它了,我们已经完成了 Ag 中最难的一步!考虑这个为什么是对的。对于已经配对好的直线来讲,别的不管怎么动贡献肯定都是直角,是没有影响的,因此忽略掉她们。注意到,从 到 之间的直线的数量(当然,只考虑剩下来的没被忽略掉的),与 到 之间的直线的数量,几乎是一样的,取决于 的奇偶性最多相差 。
考虑 转动带来的变化,设其转动的锐角为 。注意到那两部分间必然存在一部分,到 的角度全部增加,且增加了 ;而另一部分中有增有减,并且变化的幅度都不超过 。由于数量相差不超过 ,以及 , 本身的增加,整体上是不减的。

如上图是几种情况。
const int N = 1e5 + 5; const int rt = 2.5e4, m = 5e4; int a[N], p[N]; bool cmp(int x, int y) { return a[x] < a[y]; } void energy(int n, vector<int> v) { F(i, 0, n - 1) a[i] = v[i], p[i] = i; sort(p, p + n, cmp); F(i, 1, n >> 1) { int x = p[i - 1], y = p[i - 1 + (n >> 1)]; rotate({y}, ((v[x] + rt - v[y]) % m + m) % m); } }操作数是恰好的 ,而出题人的限制给到了足足 ,哈哈哈,真幽默呀。
我是 xst 粉丝,建议降黄,嘟嘟嘟。
- 1
信息
- ID
- 12309
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者