CCC2020 Surmising a Sprinter's Speed

转载请征求许可,禁止爬虫转载

开始刷CCC(Canadian Computing Competition)的题了,纪念一下。

A了道水题。


这些题目的版权相关还不是很清楚,就不贴原题了。

大意:给出 (2le N le 100,000) 组数据,每组包括 (0 le T le 1,000,000,000)(−1,000,000,000 le X le 1,000,000,000) ,表示 (T) 秒时物体位于 (X) 处。求在整个运动过程中物体的最大速度。没有奇奇怪怪的情况。

样例:

3
0 100
20 50
10 120

样例输出:

7.0

分析样例可知:

样例分析

显然需要按照时间顺序,依次分析每段移动的位移与时间差,求最大速度。

使用结构体储存每次的记录:

struct obs{
	int ti;
	int pos;
}; 

考虑使用优先队列存储所有记录,重载运算符来实现时间小的在前:

priority_queue <obs> q;
bool operator < (const obs &a, const obs &b){
	return a.ti > b.ti;
}

输入完成后遍历一遍,打擂台取最大速度即可。

double max_spd = -1;
obs last = q.top(), curr;
q.pop();
for(int i=0; i<N-1; i++){
	curr = q.top();
	double curr_spd = abs((double)(curr.pos - last.pos) / (double)(curr.ti - last.ti)); 
	//注意此处速度要取绝对值(准确地说,求速率)
	max_spd = max(max_spd, curr_spd);
	q.pop();
	last = curr;
}

作为 CCC Senior 的 T1 还是挺友好的。顺便夸一下滑铁卢的评测,虽然界面老点,硬件性能以及宽容度很好。

原文地址:https://www.cnblogs.com/miserweyte/p/14304310.html