CCC2020 Surmising a Sprinter's Speed

轉載請徵求許可,禁止爬蟲轉載

開始刷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 還是挺友好的。順便誇一下滑鐵盧的評測,雖然界面老點,硬件性能以及寬容度很好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章