• Piotr's Ants UVA


    vj传送门

    uva传送门

    题意 给你一根木棒长度, 然后n个蚂蚁的初始位置和 初始方向,  问 t 时间以后蚂蚁的位置和方向是?(蚂蚁速度为 1 )

       这个题目的关键是两个蚂蚁相撞以后就互相反向运行  可以当成是两个小车相撞以后反向速度不变继续行驶,因为把蚂蚁缩小缩小缩小以后 宏观上看 相撞以后反向可以想象成直接穿过而行, 因为撞之前有一个从左向右行驶的小车和一个从右向左行驶的小车 速度都为1 , 撞之后依然是两个这样的小车 只不过小车方向互换了而已  之前向右 撞完以后向左了 之前向左的向右了, 可以暂时忽略这个方向问题 只需要记住撞之前有一个小车从位置1 跑向右边, 那么1s  位置2以后一定有一辆小车,

      然后我们还可以观察到一个性质就是 无论怎么撞  小车与小车的相对位置不变, 比如说 小车1从左向右开 小车2从右往左开 无论他们怎么撞 小车1还是在小车2的左边  小车2还是在小车1的右边, 因为他们撞完以后只能改变开的方向 不能真正的穿过去

     所以这道题我们只需要记录一下蚂蚁的初始位置的从左到右的顺序, 然后每个蚂蚁直接跑 t 时间, 再排个序 根据初始位置输出即可, 还需要判断一下有没有在同一位置的蚂蚁(正在相撞) 或者有没有掉下木棒啥的

     哦, 输出每个样例还得换行 PE警告

    #include<bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    #define _for(i,a,b) for(int i = (a); i < (b); i++)
    #define _rep(i,a,b) for(int i = (a); i <= (b); i++)
    #define all(v) (v).begin(), (v).end()
    
    struct Ant {
        int pos, dir, idx;
        bool operator < (const Ant& x) {
            return x.pos < pos;
        }
    };
    void task10881() {
        int t1; cin >> t1;
        int kase = 1;
        while(t1--) {
            cout << "Case #" << kase++ << ":
    ";
            int l, t, n; cin >> l >> t >> n;
            vector<Ant> a(n), b(n);
            _for(i,0,n) {
                string s;  
                int x;
                cin >> x >> s;
                int d = (s=="R" ? 1 : -1);
                a[i] = (Ant){x,d,i};
                b[i] = (Ant){x+d*t,d,0};
            }
            sort(all(a));
            sort(all(b));
            vector<int> order(n);
            _for(i,0,n) order[a[i].idx] = i;
            _for(i,1,n) if(b[i].pos == b[i-1].pos) b[i-1].dir = b[i].dir = 0;
            string s[] = {"L", "Turning", "R"};
            _for(i,0,n) {
                int x = order[i];
                if((b[x].pos < 0) or (b[x].pos > l)) cout << "Fell off
    ";
                else cout << b[x].pos << " " << s[b[x].dir+1] << "
    ";
            }cout << "
    ";
        }
        return;
    }
    
    int main() {
        ios::sync_with_stdio(false), cin.tie(nullptr);
        task10881();
        //task3();
        return 0;
    }
  • 相关阅读:
    mysql数据库小常识
    CSP.ac #61乘积求和
    CSP.ac #60
    CSP.ac低仿机器人(T1-1)
    题解:swj社会摇基础第一课
    题解:T103180 しろは的军训列队
    关 于 篮 球
    关 于 自 恋
    题解:T103342 Problem A. 最近公共祖先
    关 于 匀 变 速 直 线 运 动 的 推 论
  • 原文地址:https://www.cnblogs.com/163467wyj/p/13514793.html
Copyright © 2020-2023  润新知