思路分析
“转向”问题
假设蚂蚁A与蚂蚁B相遇后转向,可以视作A,B交换位置,从而消除转向。
距离问题
最长距离:比较每只蚂蚁距两端的最大距离,取两端中最大值,取一组中最长距离的最大值。
最短距离:比较每只蚂蚁距两段的最小距离,取两端中最小值,取一组中最短距离的最大值。
参考代码
#include<iostream>
#include<vector>
using namespace std;
int main() {
int N;
cin >> N;
int len, n;
vector<int> ans1(N, 0), ans2(N, 0);//用于存储答案
int index = 0;
while (N--) {
cin >> len >> n;
int tmpmax = 0, tmpmin = 0;//每一组都要重置
for (int i = 0; i < n; ++i) {
int tmp;
cin >> tmp;
tmpmax = max(max(len - tmp, tmp), tmpmax);//取一组中最大的距两端较远的距离
tmpmin = max(min(len - tmp, tmp), tmpmin);//取一组中最大的距两端较近的距离
}
ans1[index] = tmpmin;
ans2[index] = tmpmax;
index++;
}
for (int i = 0; i < ans1.size(); ++i) {
cout << ans1[i] << " " << ans2[i] << endl;
}
return 0;
}