开始刷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 还是挺友好的。顺便夸一下滑铁卢的评测,虽然界面老点,硬件性能以及宽容度很好。