题解 | #坠落的蚂蚁#
坠落的蚂蚁
https://www.nowcoder.com/practice/fdd6698014c340178a8b1f28ea5fadf8
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n; //蚂蚁个数
cin >> n;
vector<int> point(n), speed(n); //分别记录蚂蚁的位置和移动方向
for (int i = 0; i < n; ++i) {
cin >> point[i] >> speed[i];
}
//1、找到初始静止的蚂蚁位置
int index;
for (int i = 0; i < n; ++i)
if (speed[i] == 0) {
index = point[i];
break;
}
//2、静止蚂蚁“左边朝右”和“右边朝左”的蚂蚁数量
vector<int> left, right; //记录“右边朝左”和“左边朝右”的蚂蚁初始位置
for (int i = 0; i < n; ++i) {
if (point[i] < index && speed[i] == 1)
right.push_back(point[i]);// “左边朝右”
else if (point[i] > index && speed[i] == -1)
left.push_back(point[i]); // “右边朝左”
}
//3、比较静止蚂蚁“左边朝右”和“右边朝左”的蚂蚁数量,判断其掉落方向
//关键:静止蚂蚁及其“左边朝右”和“右边朝左”的蚂蚁,它们的相对位置保持不变
//① 左右相等-->不会坠落
if (left.size() == right.size()) {
cout << "Cannot fall!" << endl;
}
//② 左>右-->往左掉
else if (left.size() > right.size()) {
int relative_point = right.size(); //初始静止的蚂蚁的相对位置(下标从0开始)
sort(left.begin(), left.end());
cout << left[relative_point] << endl;
}
//③ 右>左-->往右掉
else if (left.size() < right.size()) {
int relative_point = left.size(); //初始静止的蚂蚁的相对位置(下标从0开始)
sort(right.begin(), right.end(), greater<int>());
cout << 100 - right[relative_point] << endl;
}
return 0;
}

