JZOJ__Day 1:【NOIP普及模拟】JABUKE

本文解析了一道经典的算法题目——接苹果游戏。通过左右移动屏幕下方占据一定列数的船只来接住从屏幕顶部掉落的苹果,目标是最小化船只移动的总距离。文章详细阐述了解决该问题的方法,并提供了具体的程序实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

    Mirko 最近发现了一个古老的游戏。这个游戏的屏幕有N列在屏幕的底部,有个占M(M<N)列的船。在玩这个游戏的

过程中,我们可以左右移动这条船,但是这条船必须时刻完整的在屏幕里面。这条开始的时候是在最左边的。有一些苹果从

这个屏幕的顶部掉下来,每个苹果会从屏幕N列中的某一列的顶部掉下来,垂直下落直到到达屏幕的底部。当前一个苹果掉落在

底部以后,后一个苹果开始下落。一个苹果被船接到是这么定义的:这条船占有这个苹果掉下来的那一列。我们的目标是接到所

有的苹果,在这种情况下,我们要求在所有苹果的掉落过程中,尽量减少船的移动距离。

输入


第一行包括两个整数NM1<=M<N<=10),第二行输入一个整数J,表示苹果的总个数,接下来的J行,每行一个整数,表示相应的苹果掉落在第几列。


输出

输出只有一个整数,代表在所有苹果下落的过程中,我们需要最少的移动船的总距离。

样例输入
5 1
3
1
5
3
样例输出
6
数据范围限制
提示

输入:


5 2


3


1


5


3


输出:


4



分析

三种情况:

第一种:船能接住苹果,不用移动。

第二种:苹果在船的左边,只需把船最左边的坐标变成苹果落下来的那一列,再把船最右边的坐标处理一下。

第三种:苹果在船的右边,只需把船最右边的坐标变成苹果落下来的那一列,再把船最左边的坐标处理一下。



程序:

        

var
n,m,j,w,a,b,i,tj:longint;
begin
    readln(n,m);
    readln(j);
    a:=1;b:=m;tj:=0;
    for i:=1 to j do
    begin
        readln(w);
        if w<a then
        begin
            tj:=tj+(a-w);
            b:=b-(a-w);
            a:=w;
        end else
        if w>b then
        begin
            tj:=tj+(w-b);
            a:=a+(w-b);
            b:=w;
        end;
    end;
    write(tj);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值