開始刷CCC(Canadian Computing Competition)的題了,紀念一下。
A了道水題。
這些題目的版權相關還不是很清楚,就不貼原題了。
大意:給出 \(2\le 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 還是挺友好的。順便誇一下滑鐵盧的評測,雖然界面老點,硬件性能以及寬容度很好。