#SLT02A. 2026年S组模拟赛10连测第2场-T1 挪车

2026年S组模拟赛10连测第2场-T1 挪车

项目 内容
输入文件名 shift.in
输出文件名 shift.out
可执行文件名 shift
每个测试点时限 1.0 秒
内存限制 512 MiB
测试点数目 20
是否等分 是

结果比较方式为全文比较(过滤行末空格及文末换行)。

题目描述

某停车场有一列沿通道排开的车位,从入口向里依次编号为 1∼n1 \sim n。每个车位上停着一辆车,车的编号为 1∼n1 \sim n,每个编号恰好出现一次。按照场务管理规定,盘点结束时,对每个 ii,ii 号车位上必须恰好停 ii 号车。

停车场配有一台挪车机械。机械每执行一次操作,可以选定两个距离恰好为 kk 的车位——即编号为 ii 与 i+ki+k 的两个车位(1≤i≤n−k1 \le i \le n-k)——把这两个车位上的车对调。操作次数不限,同一对车位可以被操作多次,同一辆车也可以被挪动多次。

调度室拿到了当前的停车记录。请核算:要使车位达到管理规定的要求,最少需要执行多少次操作;如果无论怎么操作都无法做到,输出 −1-1。

输入格式

从文件 shift.in 中读入数据。

  • 第一行两个整数 n,kn, k,分别表示车位数量和机械每次操作对调的车位距离;
  • 第二行 nn 个整数 p1,p2,…,pnp_1, p_2, \dots, p_n,其中 pip_i 表示当前 ii 号车位上停的车的编号。

输出格式

输出到文件 shift.out 中。

输出一行一个整数,表示达到管理规定所需的最少操作次数;若不可能做到,输出 −1-1。

样例

6 2
3 2 5 4 1 6
2

样例 1 解释

一种操作过程是:先对调 33 号位与 55 号位上的车,各车位变为 3,2,1,4,5,63, 2, 1, 4, 5, 6;再对调 11 号位与 33 号位上的车,各车位变为 1,2,3,4,5,61, 2, 3, 4, 5, 6,达到要求。共 22 次操作。11 次操作不可能完成:初始时 1,3,51, 3, 5 号位上的车都不是该位应停的车,一次操作只能对调两个车位,至多使其中两辆归位。

5 2
4 2 1 3 5
-1

样例 2 解释

44 号车要停到 44 号位。它初始在 11 号位,而每次被对调都只能移动到与当前车位相距恰好 22 的车位,永远到不了 44 号位。

8 3
4 8 6 1 2 3 7 5
4

样例 3 解释

按车位编号模 33 的余数分三组核算:1,4,71,4,7 号位上停的车恰为 4,1,74,1,7 号车,需 11 次对调归位;2,5,82,5,8 号位上停的车恰为 8,2,58,2,5 号车,需 22 次;3,63,6 号位上停的车恰为 6,36,3 号车,需 11 次。合计 1+2+1=41 + 2 + 1 = 4 次。

数据范围

对于所有测试数据,保证:

  • 1≤n≤2×1051 \le n \le 2 \times 10^5;
  • 1≤k≤n1 \le k \le n;
  • p1,p2,…,pnp_1, p_2, \dots, p_n 是 1∼n1 \sim n 的一个排列。

各测试点的约束如下:

测试点 nn 特殊性质
1∼31 \sim 3 ≤10\le 10 无
4∼84 \sim 8 ≤500\le 500
9∼129 \sim 12 ≤2×105\le 2 \times 10^5 A
13∼2013 \sim 20 无
  • 特殊性质 A:k=1k = 1。
难度 未评定
通过率 —
尝试 0
通过 0
ID
3773
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者