JZOJ__Day 1:【NOIP普及模拟】JABUKE

题目描述

    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.

原文地址:https://www.cnblogs.com/YYC-0304/p/9500097.html