LUOGU P7625 ABUKE
题目分析
船有长度,所以船的坐标可以用 $l$ 和 $r$ 来表示。
如果苹果在 $a$ 这个坐标就有三种情况:
- 苹果在船的左边 $a<l<r$ 移动步数 $=l-a$;
- 苹果在船的右边 $l<r<a$ 移动步数 $=a-r$;
- 苹果在船上 $l\leq a\leq r$ 移动步数不会改变。
所以代码也就好写了。
代码
#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 见祖宗
需要注意的是两种情况更新步骤相同但更新次序不同。

浙公网安备 33010602011771号