P7625 ABUKE

· · 题解

题目分析

船有长度,所以船的坐标可以用 lr 来表示。

如果苹果在 a 这个坐标就有三种情况:

所以代码也就好写了。

代码

#include<bits/stdc++.h>
using namespace std;
long long read(){
    long long x;
    scanf("%lld",&x);
    return x;
}
signed main() {
    long long n=read(),m=read(),j=read(),ans = 0,l = 1,r=m;
    for(long long i = 1; i <= j; i++) {
        long long a=read();
        if(a<l) { //苹果在船左边 
            ans+=l-a;  //加上步数 
            l=a;       //更新左边 
            r=l+(m-1); //更新右边
        }
        else if(a>r) { //苹果在船右边 
            ans+=a-r;  //加上步数 
            r=a;       //更新右边 
            l=r-(m-1); //更新左边 
        }
//      else{          //为了好看 (逃) 
//          ans=ans;
//          r=r;
//          l=l;
//      }
    }
    printf("%lld\n",ans);
}
//十年OJ一场空,不开Long Long 见祖宗 

需要注意的是两种情况更新步骤相同但更新次序不同。