接苹果游戏 小学生邀请赛T3

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
思路:
虽然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);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值