#P17241. [IOI 2026] 纪念碑 / Monuments

    ID: 19740 远端评测题 1000ms 2048MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>IOI交互题Special Judge2026

[IOI 2026] 纪念碑 / Monuments

题目描述

撒马尔罕著名的雷吉斯坦广场内有 NN 座纪念碑,它们排列成一条穿过广场中心的直线。这些纪念碑的编号从 00 到 N−1N-1。编号为 ii(0≤i<N0\le i<N)的纪念碑初始位于整数坐标 X[i]X[i] 处,广场中心位于坐标 00。

建筑师要求建筑布局关于中心完美对称。他们希望通过移动其中一些(数量可能为零)纪念碑,使得最终的建筑布局关于坐标 00 对称,可以形式化描述如下:

  • 所有纪念碑必须位于整数坐标处。
  • 每个整数坐标可以放置零个、一个或多个纪念碑。
  • 对于任意整数 x>0x>0,位于坐标 xx 处的纪念碑数量必须等于位于坐标 −x-x 处的纪念碑数量。坐标 00 上可以放置任意数量的纪念碑(数量可能为零)。

然而,有 MM 座古老纪念碑年久失修导致无法移动。它们的编号为 P[0],P[1],…,P[M−1]P[0],P[1],\ldots,P[M-1]。这 MM 座纪念碑必须停留在其原始坐标上,其余 N−MN-M 座纪念碑可以移动到任意整数坐标处。在移动过程中,纪念碑之间互不干扰。

将一座纪念碑从坐标 aa 移动至坐标 bb 的代价为 ∣a−b∣|a-b|。总代价定义为所有被移动纪念碑的代价之和。

你的任务是求出使所有纪念碑的建筑布局关于坐标 00 对称的最小总代价;如果无法在给定约束下实现对称,则判定为无解。

实现细节

你要实现以下函数:

long long get_cost(std::vector X, std::vector P)
  • XX:长度为 NN 的非递减数组,给出纪念碑的初始坐标。
  • PP:长度为 MM 的严格递增数组,给出古老纪念碑的编号。
  • 对于每个测试用例,该函数恰好被调用一次。

该函数应返回一个整数:使建筑布局对称的最小总代价;如果不可能,则返回 −1-1。

输入格式

N M
X[0] X[1] ... X[N-1]
P[0] P[1] ... P[M-1]

注意,如果 M=0M=0,则第三行可能为空行。

输出格式

C

其中,CC 为 get_cost 的返回值。

提示

例子

例 1

考虑以下调用:

get_cost([-3, -2, 1, 3], [1, 2])

纪念碑的初始建筑布局如下图所示。

:::align{center} :::

共有 N=4N=4 座纪念碑,初始坐标分别为 [−3,−2,1,3][-3,-2,1,3]。古老纪念碑的编号为 P[0]=1P[0]=1 和 P[1]=2P[1]=2。即坐标为 X[P[0]]=−2X[P[0]]=-2 和 X[P[1]]=1X[P[1]]=1 的纪念碑不能移动。其余坐标为 −3-3 和 33 的纪念碑可以移动。

为使总代价最小且达到对称,我们需要如下移动纪念碑:

  • 将坐标为 −3-3 的纪念碑移至 −1-1,代价为 ∣(−3)−(−1)∣=2|(-3)-(-1)|=2。
  • 将坐标为 33 的纪念碑移至 22,代价为 ∣3−2∣=1|3-2|=1。

移动后布局变为对称。

:::align{center} :::

总移动代价为 2+1=32+1=3,因此该函数应返回 33。

例 2

考虑以下调用:

get_cost([2, 2, 2, 3], [])

此处 M=0M=0,表示没有古老纪念碑,所有纪念碑均可移动。

一种最小总代价的解法是将所有纪念碑移至坐标 00。每座纪念碑的移动代价为:

  • 纪念碑 00、11 和 22 的代价为 ∣2−0∣=2|2-0|=2。
  • 纪念碑 33 的代价为 ∣3−0∣=3|3-0|=3。

总代价为 2+2+2+3=92+2+2+3=9。因此该函数应返回 99。注意,存在其他总代价相同的解法。

例 3

考虑以下调用:

get_cost([1, 2, 3, 4], [0, 1, 2, 3])

全部 44 座纪念碑均为古老纪念碑,无法移动。

由于它们的坐标均为正数,无法使建筑布局关于 00 对称。

因此该函数应返回 −1-1。

约束条件

  • 1≤N≤500 0001\le N\le 500\,000
  • 0≤M≤N0\le M\le N
  • −109≤X[0]≤X[1]≤⋯≤X[N−1]≤109-10^9\le X[0]\le X[1]\le\cdots\le X[N-1]\le 10^9
  • 0≤P[0]<P[1]<⋯<P[M−1]<N0\le P[0]<P[1]<\cdots<P[M-1]<N

子任务

子任务 分数 额外的约束条件
11 33 M=NM=N
22 44 M=0M=0
33 55 对于所有满足 0≤j<M0\le j<M 的 jj,均有 X[P[j]]<0X[P[j]]<0。
44 66 N≤10N\le 10
55 55 N≤19N\le 19
66 N≤32N\le 32
77 1313 N≤200N\le 200
88 1717 N≤4000N\le 4000
99 1313 M≤4000M\le 4000
1010 2929 没有额外的约束条件。