其他分享
首页 > 其他分享> > POJ 1852 Ants

POJ 1852 Ants

作者:互联网

题目传送门 点击这里
解题思路概要
两个蚂蚁相撞之后,其实跟没有撞的效果是一样的。相当于还是每个蚂蚁在单独运动。
所以准备了两个数组,第一个数组存放题目中录入的数据。
第二个数组的大小是第一个数组的二倍。其中存入的数据除了第一个数组中的数据外,还要有木棍的长度减去第一个数组中的每个数。
相当于说第二个数组中存放的是每个蚂蚁到左右两个端点的距离。
然后用快排对第二个数组进行排序。
其中下标为num-1的恰好是最短时间,下标为num*2-1的恰好为最长的时间。
源代码及注释见下

//written by Kingdeguo 2020.4.4
//All rights reversed
#include <stdio.h>
#include <stdlib.h> //to use qsort

//declare out of main function because is the scale of data is a little big
//prevent stack overflow
const int maxn = 1000010;
int Distance[maxn];
int Distance2[maxn*2];

int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;//If you want to from large to small,write this "return *(int *)b-*(int *)a;"
}

int main()
{
	int casenum=0;
	int length=0, num=0;
	scanf("%d",&casenum);
	int i=0;
	while(casenum){
		scanf("%d %d",&length,&num);

		for(i=0; i<num; ++i){
			scanf("%d",&Distance[i]);

			Distance2[i]=Distance[i];
			Distance2[i+num] = length-Distance[i];
		}
		qsort(Distance2,num*2,sizeof(Distance2[0]),cmp);
		printf("%d %d\n",Distance2[num-1],Distance2[num*2-1]);
		casenum--;
	}
	return 0;
}

标签:const,int,1852,Ants,casenum,num,POJ,数组,maxn
来源: https://blog.csdn.net/weixin_44895666/article/details/105313342