[语言月赛202301] 避雷针
题目描述
n n n 个避雷针从左至右排成一排,我们将它们从左至右依次标号为 1 ∼ n 1 \sim n 1∼n。
现在有 m m m 道雷依次劈下。你得知了一串序列 a 1 , ⋯ , a m a _ 1, \cdots, a _ m a1,⋯,am。对于第 i i i 道雷,其劈中了 a i − 2 a _ i - 2 ai−2(如果存在)、 a i − 1 a _ i - 1 ai−1(如果存在)、 a i a _ i ai、 a i + 1 a _ i + 1 ai+1(如果存在)、 a i + 2 a _ i + 2 ai+2(如果存在)号避雷针。
在 m m m 道雷劈完后,你想要知道,被劈过至少一次的避雷针有几个。
输入格式
输入共两行。
第一行为两个整数 n , m n, m n,m,代表避雷针数量和雷的数量。
第二行为 m m m 个整数 a 1 , ⋯ , a m a _ 1, \cdots, a _ m a1,⋯,am,代表题面中的序列。
输出格式
输出共一行。
输出一行一个整数,被劈过至少一次的避雷针的数量。
样例 #1
样例输入 #1
17 1
4
样例输出 #1
5
样例 #2
样例输入 #2
10 1
2
样例输出 #2
4
样例 #3
样例输入 #3
9 3
3 7 7
样例输出 #3
9
提示
样例 1 解释
被劈中的避雷针是 2 , 3 , 4 , 5 , 6 2, 3, 4, 5, 6 2,3,4,5,6 号,共 5 5 5 个。
样例 2 解释
被劈中的避雷针是 1 , 2 , 3 , 4 1, 2, 3, 4 1,2,3,4 号,共 4 4 4 个。请注意 a 1 − 2 = 0 a _ 1 - 2 = 0 a1−2=0 号避雷针不存在,也不应被劈中。
样例 3 解释
被劈中的避雷针是 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 1, 2, 3, 4, 5, 6, 7, 8, 9 1,2,3,4,5,6,7,8,9 号,共 9 9 9 个。
请注意尽管部分避雷针被劈了两次甚至三次,对这些避雷针我们仍然只计数一次。
数据规模与约定
- 对于前 10 % 10\% 10% 的数据,保证 n = 1 n = 1 n=1。
- 对于前 30 % 30\% 30% 的数据,保证 m = 1 m = 1 m=1。
- 对于另外 20 % 20\% 20% 的数据,保证 m ≤ n − 2 m \leq n - 2 m≤n−2 且 ∀ i ∈ [ 1 , m ] , a i = i \forall i \in [1, m], a _ i = i ∀i∈[1,m],ai=i。
- 对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m ≤ 1 0 6 1 \leq n,m \leq 10 ^ 6 1≤n,m≤106, 1 ≤ a i ≤ n 1 \leq a _ i \leq n 1≤ai≤n。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容