• 坠落的蚂蚁(暑假每日一题 40)


    一根长度为 1 1 1 米的木棒上有若干只蚂蚁在爬动。

    它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右。

    如果两只蚂蚁碰头,则它们立即交换速度并继续爬动。

    三只蚂蚁碰头,则两边的蚂蚁交换速度,中间的蚂蚁仍然静止。

    如果它们爬到了木棒的边缘( 0 0 0 100 100 100 厘米处)则会从木棒上坠落下去。

    在某一时刻蚂蚁的位置各不相同且均在整数厘米处(即 1 , 2 , 3 , … 99 1,2,3,…99 12399 厘米),有且只有一只蚂蚁 A A A 速度为 0 0 0,其他蚂蚁均在向左或向右爬动。

    给出该时刻木棒上的所有蚂蚁位置和初始速度,找出蚂蚁 A A A 从此时刻到坠落所需要的时间。

    输入格式
    第一行包含一个整数表示蚂蚁的个数 N N N,之后共有 N N N 行,每一行描述一只蚂蚁的初始状态。

    每个初始状态由两个整数组成,中间用空格隔开,第一个数字表示初始位置厘米数 P P P,第二个数字表示初始方向,−1 表示向左,1 表示向右,0 表示静止。

    输出格式
    蚂蚁 A A A 从开始到坠落的时间。若不会坠落,输出 Cannot fall!

    数据范围
    2 ≤ N ≤ 99 , 2≤N≤99, 2N99,
    1 ≤ P ≤ 99 1≤P≤99 1P99
    输入样例:

    4
    10 1
    90 0
    95 -1
    98 -1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出样例:

    98
    
    • 1

    #include
    #include
    #include
    
    #define x first
    #define y second
    
    using namespace std;
    
    typedef pair<int, int> PII;
    
    int main(){
        
        int n;
        cin >> n;
        
        vector<PII> q;
        int A;
        for(int i = 0; i < n; i++){
            int x, y;
            cin >> x >> y;
            if(!y) A = x;
            q.push_back({x, y});
        }
        
        sort(q.begin(), q.end());
        
        vector<int> l, r;
        for(auto &p: q){
            
            if(!p.y || p.x < A && p.y < 0 || p.x > A && p.y > 0)
                continue;
            if(p.x < A) l.push_back(p.x);
            else r.push_back(p.x);
        }
        
        if(l.size() == r.size()) cout << "Cannot fall!" << endl;
        else if(l.size() < r.size()) cout << r[l.size()] << endl;
        else cout << 100 - l[l.size() - r.size() - 1] << endl;
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】
    react 编程式导航实现页面跳转
    对这6年的测试经历做个总结
    steam搬砖好做吗?真如别人说的很能赚?
    竞赛 深度学习YOLO抽烟行为检测 - python opencv
    Kubernetes中gRpc的服务发现
    FluentCRM 2.5 – 大量新功能,自动化你的业务!
    计算机毕业论文java毕业设计选题源代码
    JavaScript 数据类型及其用法
    React基础学习-Day04
  • 原文地址:https://blog.csdn.net/qq_46456049/article/details/126618193