AtCoder Grand Contest 013 C - Ants on a Circle

原创 2018年04月16日 16:06:38

题意

在一个长度为L的环上有一群蚂蚁,每一只蚂蚁都有一个两两不同的坐标和行走方向(逆时针或顺时针)且行走速度均为1。当两只蚂蚁相撞时他们会一起反向,问T个时刻后每一只蚂蚁的位置。
1<=n<=100000,1<=T,L<=10^9

分析

两只蚂蚁相撞的情况实际可以看成是他们代替对方走了下去,也就是编号互换。所以我们可以得到T时刻后所有蚂蚁的坐标。
还有一个性质是所有蚂蚁的相对顺序始终不变,因为他们不会跨过对方。
于是,当有一只蚂蚁从0走到L-1时,坐标最小的蚂蚁的编号就会+1;反之,当有一只蚂蚁从L-1走到0时,编号为-1,于是我们就可以得到所有蚂蚁的坐标了。

代码

#include <bits/stdc++.h>

const int N = 100005;

int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();}
    while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
    return x * f;
}

int a[N],b[N];

int main()
{
    int n = read(), L = read(), T = read();
    int s = 1;
    for (int i = 1; i <= n; i++)
    {
        int x = read(), w = read();
        if (w == 1)
        {
            a[i] = (x + T) % L;
            if (T >= L - x)
                (s -= (T - L + x) / L + 1) %= n;
        }
        else
        {
            a[i] = ((x - T) % L + L) % L;
            if (T >= x + 1)
                (s += (T - x - 1) / L + 1) %= n;
        }
    }
    s = (s % n + n - 1) % n + 1;
    std::sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++)
        b[(s + i - 2) % n + 1] = a[i];
    for (int i = 1; i <= n; i++)
        printf("%d\n",b[i]);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ypxrain/article/details/79961952

Atcoder Grand Contest 013C - Ants on a Circle

Problem Statement There is a circle with a circumference of L. Each point on the circumference ha...
  • wxh010910
  • wxh010910
  • 2017-04-16 19:25:14
  • 485

Atcoder Grand Contest 013D - Piling Up

Problem Statement Joisino has a lot of red and blue bricks and a large box. She will build a tower o...
  • wxh010910
  • wxh010910
  • 2017-04-16 19:29:46
  • 461

AtCoder Grand Contest 010

A 很水的题, 最后全是偶数就行 #include #include #include #include #include using n...
  • sasuke__
  • sasuke__
  • 2017-02-05 23:38:04
  • 438

AtCoder Grand Contest 011 A\B 贪心、二分

A - Airport Bus 時間制限 : 2sec / メモリ制限 : 256MB 配点 : 300 点 問題文 高橋空港には,毎日飛行機で N 人の乗客が到着しま...
  • kyoma
  • kyoma
  • 2017-03-12 21:58:00
  • 286

AtCoder Grand Contest 021C-Tiling

C - Tiling Time limit : 2sec / Memory limit : 256MB Score : 900 points Problem Statem...
  • qq_34531807
  • qq_34531807
  • 2018-02-25 15:41:14
  • 63

AtCoder Grand Contest 022

虽然离比赛结束还有3分钟,不过用了两小时17分钟来写第一题,第二题分数翻倍,估计也是写不完了。首先第一题的题目是:https://agc022.contest.atcoder.jp/tasks/agc...
  • weixin_41842673
  • weixin_41842673
  • 2018-04-01 01:41:06
  • 65

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard 传送门:http://agc006.contest.atcoder.jp/tas...
  • Pure_W
  • Pure_W
  • 2017-03-02 07:37:53
  • 332

AtCoder Grand Contest 008

AtCoder Grand Contest 008 题目链接: https://agc008.contest.atcoder.jp/ A.Simple Calculator(模拟) B.Cont...
  • Icefox_zhx
  • Icefox_zhx
  • 2017-11-22 16:59:13
  • 774

Atcoer Grand Contest 001 F 拓补排序 STL

题意:给定一个1⋯n的排列{pi},给定一个K,对于pi=pj+1且|i−j|≥K可以交换pi和pj的值,求经过变换可以得到的最小的字典序。神题= =完全没什么想法,没想到暴力90分,数据水的不行了。...
  • qq_35866453
  • qq_35866453
  • 2017-10-12 15:46:24
  • 91
收藏助手
不良信息举报
您举报文章:AtCoder Grand Contest 013 C - Ants on a Circle
举报原因:
原因补充:

(最多只允许输入30个字)