直接模拟即可,需要注意的是移动的时候,若当前苹果在板的左边,让板的左边沿到达当前列;若当前苹果在板的右边,让板的右边沿到达当前列;否则,表示苹果在板的范围内,不需移动。按时更新移动后的位置就没什么问题了。
Run Time: 0sec
Run Memory: 304KB
Code length: 767Bytes
Submit Time: 2011-12-14 00:23:22
// Problem#: 4422
// Submission#: 1074737
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<cstdio>
using namespace std;
int main()
{
int T, N, M, J;
int left, right;
int apple, step;
scanf( "%d", &T );
while ( T-- ) {
scanf( "%d%d", &N, &M );
scanf( "%d", &J );
left = 1;
right = M;
step = 0;
for ( int i = 1; i <= J; i++ ) {
scanf( "%d", &apple );
if ( apple < left ) {
step += left - apple;
left = apple;
right = apple + M - 1;
}
else if ( apple > right ) {
step += apple - right;
right = apple;
left = apple - M + 1;
}
}
printf( "%d\n", step );
}
return 0;
}