P1367 蚂蚁

题目描述

有许多蚂蚁在一根无限长的木棍上,每一只蚂蚁都有一个初始位置和初始朝向(任意两只蚂蚁的初始位置不同)。蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计)。现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在t秒后的位置和朝向。

输入格式

第一行,两个空格隔开的整数n,t(代表蚂蚁数n和时间t)

第2~n+1行每行两个整数,第i+1行代表第i只蚂蚁的初始位置ai(ai的绝对值在1000000以内)及初始朝向bi(bi=1时蚂蚁朝右,bi=-1时蚂蚁朝左)

输出格式

n行,每行两个整数,第i行代表t秒后第i只蚂蚁的位置及朝向(-1表示朝左,1表示朝右,0表示正在转向中)

输入输出样例

输入 #1复制

4 1
1 1
5 1
3 -1 
10 1

输出 #1复制

2 0
6 1
2 0
11 1

说明/提示

【数据范围】

对于40%的数据,n<=100

对于80%的数据,n<=10000,t<=1000

对于100%的数据,n<=100000,t<=100000

目标:获得t秒后,蚂蚁们的位置分布;

题目类型:模拟

注意点: 1)样例的蚂蚁坐标是乱序的,需要按坐标排序

                2)最终输出的结果要按最初给的顺序输出, 即按初始下标(样例提供顺序)排序

                3)转向时间不计, 在1s内,无论如何都会产生\pm1的位移;

                4)两只蚂蚁相撞,互换方向,并前进   可以视为  两只蚂蚁继续往前,只交换初始下标即可。

               5)当且仅当, 两只蚂蚁在同一点时,视为正在转向,即toward  0 状态。

代码:

               6)数据偏大,不要1s、1s地模拟,直接到ts后的状态即可。

#include <bits/stdc++.h>
#define MAXN 1e6+2
#define inf 0x3f3f3f3f
#define rep(x, a, b) for(int x=a; x<=b; x++)
using namespace std;
const int NC = 1e5+2;
struct node{
    int toward;
    int pos;
    int index;
}po[NC];
int t, n;
int position[NC];
void swap_(int a, int b)
{
    int t1, t2, t3;
    t1 = po[a].index;
    t2 = po[a].pos;
    t3 = po[a].toward;
    po[a].index = po[b].index;
    po[a].pos = po[b].pos;
    po[a].toward = po[b].toward;
    po[b].index = t1;
    po[b].pos = t2;
    po[b].toward = t3;
}
void sort_()
{
    rep(i, 1, n)
        rep(j, i+1, n)
            if(po[i].pos > po[j].pos) swap_(i, j);
}
int main()
{
    cin>>n>>t;
    rep(i, 1, n)
    {
        po[i].index = i;
        cin>>po[i].pos>>po[i].toward;
    }
    sort_();

    rep(i, 1, n)
    {
        po[i].pos += po[i].toward*t;
        position[po[i].index] = i;//记录  以初始下标为自变量 的蚂蚁 在排序后 的 顺序
    }
    sort_();

    rep(i, 1, n-1)
    {
        if(po[i].pos == po[i+1].pos)//同一点的蚂蚁视为转向ing
        {
            po[i].toward = 0;
            po[i+1].toward = 0;
        }
    }
    rep(i, 1, n)//用用初始下标的顺序查询 当前该蚂蚁所排的位置,再调用并输出。
        cout<<po[position[i]].pos<<" "<<po[position[i]].toward<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_54674275/article/details/121266074