CCC2020 Surmising a Sprinter's Speed
阿新 • • 發佈:2021-01-20
開始刷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 還是挺友好的。順便誇一下滑鐵盧的評測,雖然介面老點,硬體效能以及寬容度很好。