第一道自己做出来的CCPC题目
题干
Input:
Output:
For each test case,Output a single line contains one integer,representing for the minimal walking distance.
Sample Input
2 10 2 5 6 7 10 2 5 3 4
Sample Output
14 10
思路
想求任意点x,y为最后一个点,哪一个距离更短,得距离公式分别为
分类讨论(假设ax<ay)
①0<k<ax,ay
②0<ax<k<ay
③0<ax<ay<k
可得最靠近1的ai作最后一个数,距离最小。
代码
#include<stdio.h>
#include <iostream>
#include<algorithm>
using namespace std;
int main(void) {
long long T,i,j,a,min = 0;
long long n, m, k;
long long sum = 0;
cin >> T;
for (i = 0; i < T; i++) {
cin >> n >> m >> k;
sum = k - 1;
for (j = 0; j < m; j++) {
//cin >> a;
scanf("%lld", &a);
if (j == 0) min = a;
if (a < min) min = a;
sum += 2 * abs(a - k);
}
sum = sum + min - 1 - abs(min - k);
cout << sum << endl;
sum = 0;
}
return 0;
}
错误分析
数据量大的地方尽量使用scanf而避免cin。