思路:
虽然M代表了小船的占列宽,但是小船每次只能移动一格,所以我们首先排除在小船初始位置范围内的苹果,然后再让小船一步一步移动,直到最大范围能够接到苹果,因为小船初始位置在最左侧,所以不用考虑第一个苹果的位置是否在小船的左侧
package 接苹果游戏;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
* Created on 13:49 16/11/2019
* Description:
*
* @author Weleness
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
int N = sc.nextInt();//屏幕一共有几列
int M = sc.nextInt();//小船的占列宽
int num = sc.nextInt();//苹果个数
int len = 0;//走过的距离
int k = 0;//计数器
int now = 1;//当前船头的位置
boolean[] flag = new boolean[N+1];
for (int i = 1; i <= M; i++) {
flag[i] = true;//排除在小船范围内的苹果
}
while (k<num){
int index = sc.nextInt();//苹果掉落的位置
if(!flag[index]) {//如果不在小船的范围内
if (index > now) {//如果在小船的右侧
while (now+M<=index){//船头位置向右移动一格,加上整个船的宽度,判断是否能接到苹果
len++;
now++;
}
} else {//如果在船的左侧
len += now - index;//否则直接让船头减去之间的距离(每次都是1)
now = index;//修改船头当前位置
}
for (int i = 0; i <index ; i++) {//把初始位置标记的位置还原
flag[i] = false;
}
}
k++;
}
System.out.println(len);
}
}