zoukankan      html  css  js  c++  java
  • UPC5652: Ants on a Circle

    时间限制: 2 Sec  内存限制: 256 MB
    提交: 54  解决: 15
    [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    There is a circle with a circumference of L. Each point on the circumference has a coordinate value, which represents the arc length from a certain reference point clockwise to the point. On this circumference, there are N ants. These ants are numbered 1 through N in order of increasing coordinate, and ant i is at coordinate Xi.

    The N ants have just started walking. For each ant i, you are given the initial direction Wi. Ant i is initially walking clockwise if Wi is 1; counterclockwise if Wi is 2. Every ant walks at a constant speed of 1 per second. Sometimes, two ants bump into each other. Each of these two ants will then turn around and start walking in the opposite direction.

    For each ant, find its position after T seconds.

    Constraints
    All input values are integers.
    1≤N≤105
    1≤L≤109
    1≤T≤109
    0≤X1<X2<…<XN≤L−1
    1≤Wi≤2

    输入

    The input is given from Standard Input in the following format:

    N L T
    X1 W1
    X2 W2
    :
    XN WN

    输出

    Print N lines. The i-th line should contain the coordinate of ant i after T seconds. Here, each coordinate must be between 0 and L−1, inclusive.

    样例输入

    3 8 3
    0 1
    3 2
    6 1
    

    样例输出

    1
    3
    0
    

    提示

    1.5 seconds after the ants start walking, ant 1 and 2 bump into each other at coordinate 1.5. 1 second after that, ant 1 and 3 bump into each other at coordinate 0.5. 0.5 seconds after that, that is, 3 seconds after the ants start walking, ants 1, 2 and 3 are at coordinates 1, 3 and 0, respectively.

    来源/分类

     
     
     
    与经典的蚂蚁问题一样,在两只蚂蚁相遇时视为他们相互穿过,最后n只蚂蚁所处位置的相对顺序不变。
    只是这里多了一个新的问题,这是一个圆环,需要锁定一只蚂蚁的位置才可以确定这n个蚂蚁各自的位置。
    选择记录第一只蚂蚁的位置,如果有一只蚂蚁顺时针走了一圈,就相当去把第一只蚂蚁往后顶了一个位置,反之就是向前顶了一个位置
     
     
    #include "bits/stdc++.h"
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1e5+100;
    ll n, l, t;
    ll x[maxn];
    
    //如何锁定第一只蚂蚁的位置
    int main() {
        freopen("input.txt", "r", stdin);
        cin >> n >> l >> t;
        int w;
        ll temp;
        ll cnt = 0;
        for (int i = 0; i < n; i++) {
            cin >> x[i] >> w;
            if (w == 1) {
                temp = x[i] + t;
                x[i] = temp % l;
                cnt += temp / l;
            } else {
                temp = x[i] - t;
                x[i] = temp % l;
                cnt += temp / l;
                if (x[i] < 0) {
                    x[i] += l;
                    cnt--;
                }
            }
        }
        sort(x, x + n);
        cnt %= n;
        cnt = (cnt + n) % n;
        for (int i = cnt; i < cnt + n; i++) {
            cout << x[i % n] << endl;
        }
        return 0;
    
    }
  • 相关阅读:
    viewer.js 显示图片名称和照片属性
    js中判断数组中是否包含某元素的方法(转载)
    js脚本如何更新, js后加?v=版本号的原因(转载)
    iview Carousel 走马灯或轮播图 点击事件失效
    sqlserver 查询表中所有字段的最大长度(转载)
    Ueditor文字和echarts图片 生成 word 前端解决方案
    Spark Streaming Backpressure分析
    Spark任务调度流程及调度策略分析
    Spark资源调度及任务调度
    spark streaming流式计算---监听器
  • 原文地址:https://www.cnblogs.com/albert-biu/p/10477628.html
Copyright © 2011-2022 走看看