题解 | #坠落的蚂蚁#

坠落的蚂蚁

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;
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务