思路:
虽然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);}
}