#M0003. 电梯

    ID: 999 传统题 文件IO:lift 1000ms 512MiB 尝试: 41 已通过: 17 难度: 普及− 上传者: 标签>模拟CSP-J复赛T12026模拟

电梯

题目描述

本题使用文件输入输出:输入文件名为 lift.in,输出文件名为 lift.out。

一栋大楼有 mm 层,从下到上编号 1∼m1 \sim m。大楼里只有一部电梯,开始时停在第 11 层。

电梯按顺序收到了 nn 个请求,第 ii 个请求是「去第 fif_i 层」。电梯严格按收到的顺序处理:处理完第 ii 个请求(到达第 fif_i 层)后,才去处理第 i+1i+1 个。电梯从第 aa 层运行到第 bb 层,经过的楼层数记为 ∣a−b∣|a-b|。

如果一个请求的目标楼层就是电梯当前所在的楼层,电梯原地不动,直接处理下一个请求。

请你求出:

  1. 电梯处理完全部 nn 个请求后,一共经过了多少楼层;
  2. 电梯一共改变了多少次运行方向。电梯每次运行的方向要么向上、要么向下。第一次运行不算改变方向;之后每次运行,如果方向与上一次运行的方向相反,就算改变了一次方向。原地不动不算一次运行,既不计楼层也不影响方向。

输入格式

输入文件名为 lift.in。

第一行两个整数 n,mn, m,表示请求个数和大楼层数。

第二行 nn 个整数 f1,f2,…,fnf_1, f_2, \dots, f_n,表示按顺序收到的 nn 个请求的目标楼层。

输出格式

输出文件名为 lift.out。

一行两个整数,用一个空格隔开,分别表示电梯经过的楼层总数和改变方向的次数。

样例 #1

样例输入 #1

6 10
5 2 2 8 8 3

样例输出 #1

18 3

样例解释

电梯从第 11 层出发:

请求 运行 经过楼层 方向 是否改变方向
55 1→51 \to 5 44 上 第一次运行,不算
22 5→25 \to 2 33 下 是(第 11 次)
原地不动 00 — 不算运行
88 2→82 \to 8 66 上 是(第 22 次)
原地不动 00 — 不算运行
33 8→38 \to 3 55 下 是(第 33 次)

总共经过 4+3+6+5=184+3+6+5=18 层,改变方向 33 次。

样例 #2

样例输入 #2

5 6
1 1 4 4 6

样例输出 #2

5 0

样例解释

前两个请求都是第 11 层,电梯原地不动。之后 1→41 \to 4、4→64 \to 6 都是向上,中间的「44」原地不动,方向从未改变。

样例 #3

样例输入 #3

见附件中的 lift/lift3.in。

样例输出 #3

见附件中的 lift/lift3.ans。

提示

数据范围

  • 对于 30%30\% 的数据:n≤10n \le 10,m≤10m \le 10;
  • 对于 60%60\% 的数据:m≤100m \le 100;
  • 对于 100%100\% 的数据:1≤n≤1051 \le n \le 10^5,2≤m≤1052 \le m \le 10^5,1≤fi≤m1 \le f_i \le m。

提示:请注意经过楼层的总数可能很大。

附件