1 条题解

  • 0
    @ 2022-7-14 19:51:10
    #include<bits/stdc++.h>//万能头文件,美丽又大方
    using namespace std;
    int n,t,w[100001][2];//分别表示蚂蚁数量,时间长度,以及t秒后按位置从大到小排名后的位置及方向
    struct node{//结构体方便排序
    	int w,f,h,d;
    }ant[100001];//记录信息,分别为每只蚂蚁的位置,方向,输入序号以及位置永久排名(位置排名不变)
    int cmp(node x,node y){//排序方式1:按照位置排序
    	return x.w<y.w;
    }
    int cmp1(node x,node y){//排序方式2:按照输入序号排序
    	return x.h<y.h;
    }
    int main(){
        scanf("%d%d",&n,&t);
        for (int i=1;i<=n;i++){
        	scanf("%d%d",&ant[i].w,&ant[i].f);
        	ant[i].h=i;
    	}//简单输入以及标号
    	sort(ant+1,ant+1+n,cmp);//按照t秒前的位置排序
    	for (int i=1;i<=n;i++){
    		ant[i].d=i;//定位永久位置排名
        	ant[i].w+=ant[i].f*t;//模拟每个蚂蚁t秒后的位置
    	}
    	sort(ant+1,ant+1+n,cmp);//按照t秒后的位置排序
    	for (int i=2;i<=n;i++){//判断是否正在转弯(如相邻两蚂蚁坐标相等,即为正在转弯)
    		if (ant[i].w==ant[i-1].w){
    			ant[i].f=0;ant[i-1].f=0;//标记输出时的状态
    		}
    	}
    	for (int i=1;i<=n;i++){//填充记录从小到大蚂蚁的位置及方向
    		w[i][0]=ant[i].w;
    		w[i][1]=ant[i].f;
    	}
    	sort(ant+1,ant+1+n,cmp1);//按照输入序号排序
    	for (int i=1;i<=n;i++){//按照输入时的顺序依次按照各自的永久位置输出每一只蚂蚁的坐标及状态
    		printf("%d %d\n",w[ant[i].d][0],w[ant[i].d][1]);
    	}
        return 0;//好习惯,人人养成
    }
    
    • 1

    信息

    ID
    367
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    2
    已通过
    2
    上传者