• 【XSY2558】圆上的蚂蚁 Ants on circle


    Description

    L个点围成一个圆. 我们选定任意一个点作为原点, 则每个点的坐标为从原点顺时针走到这个点的距离. 圆上有N只蚂蚁, 分别被编号为1到N. 开始时, 第ii只蚂蚁在坐标为Xi的点上. 这N只蚂蚁同时开始移动. 对于每一只蚂蚁i, 给定其初始方向Wi: 假如i开始时是顺时针走的, 则Wi的值为1; 否则为2. 每只蚂蚁的速度均为1. 当某个时刻两只蚂蚁相遇时, 它们都分别都掉头往反方向走.

    对于每一只蚂蚁, 请你求出其开始移动T秒后的位置.

    Input
    输入格式如下:

    N L T
    X1 W1
    X2 W2
    :
    XN WN

    Output
    输出N行, 第i为T秒后第i只蚂蚁所在的坐标.

    每个坐标都在[0,L−1]之间.

    Sample Input

    sample input 1:
    3 8 3
    0 1
    3 2
    6 1

    sample input 2:
    4 20 9
    7 2
    9 1
    12 1
    18 1
    Sample Output

    sample output 1:
    1
    3
    0

    sample output 2:
    7
    18
    18
    1

    其实,这题有一个弱化版,那题并不要求按蚂蚁顺序输出,只用从小到大输出有蚂蚁的位置即可。

    那题解题的关键在于相遇时的掉头相当于直接穿过去了(因为不要求编号),那这题中的相遇就相当于交换了编号罢了。

    所以蚂蚁们T秒后的位置我们可以非常简单地算出来,只是不知道哪一个位置对应哪一只蚂蚁。

    所以我们就算出一号蚂蚁在T秒后的Rank,照着Rank输出即可

    我们以一只蚂蚁为标准,每有一只蚂蚁倒着穿过它,Rank--,正着穿过它,Rank++。
    接下来,按顺序输出即可。

    注意:这里的负数如果不被(l)整除,实际上他是多转了一圈的,要再次(--)
    #include<bits/stdc++.h>
    #define N 1000010
    using namespace std;
    struct data
    {
    	int x,w;
    }a[N];
    bool cmp(data a,data b)
    {
    	return a.x<b.x;
    }
    int n,l,t,sum;
    int main()
    {
    	scanf("%d%d%d",&n,&l,&t);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d%d",&a[i].x,&a[i].w);
    		a[i].w--;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(!a[i].w)
    		{
    			a[i].x+=t;
    		}else{
    			a[i].x-=t;
    		}
    		sum+=a[i].x/l;//计算第1只蚂蚁的Rank
    		if(a[i].x%l<0)//这里减少了(是负数,但不整除),要再减一次
    		{
    			sum--;
    		}
    		a[i].x=(a[i].x%l+l)%l;
    	}
    	sort(a+1,a+n+1,cmp);
    	sum=(sum%n+n)%n;
    	for(int i=sum+1;i<=n;i++)
    	{
    		printf("%d
    ",a[i].x);
    	}
    	for(int i=1;i<=sum;i++)
    	{
    		printf("%d
    ",a[i].x);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Element-UI 表单验证规则rules 配置参数说明
    vue中 关于$emit的用法
    IEDA 自动生成类注释和方法注释
    maven配置多个镜像
    git 查看修改用户名,密码
    cnpm的安装(超级详细版)
    windows命令行中 启动应用程序
    通用遥控编码2262与1527解说
    Zeller Format
    字符串截取算法
  • 原文地址:https://www.cnblogs.com/2017gdgzoi44/p/11486474.html
Copyright © 2020-2023  润新知