信息学奥赛一本通(1227:Ride to Office)
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通(1227:Ride to Office)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1227:Ride to Office
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 5002 ??? 通過數: 2822
【題目描述】
起點與終點相隔4500米。現Charley需要從起點騎車到終點。但是,他有個習慣,沿途需要有人陪伴,即以相同的速度,與另外一個人一起騎。而當他遇到以更快的速度騎車的人時,他會以相應的速度跟上這個更快的人。先給定所有與Charley同路的人各自的速度與出發時間,問Charley以這種方式跟人,騎完4500米需要多少時間。得出的結果若是小數,則向上取整。
【輸入】
輸入若干組數據,每組數據第一行n(1≤n≤10000),n為0,表示輸入結束,接著輸入n行數據,每行2個數據,表示速度v和出發時間t,如果t<0,表示陪伴人提早出發了。
【輸出】
輸出對應若干行數據,每行輸出1個數,表示最快到達的時間。
【輸入樣例】
4 20 0 25 -155 27 190 30 240 2 21 0 22 34 0【輸出樣例】
780 771【分析】
? ? ? ?依題意,Charley是跟著騎行快的人到達終點,騎行快的人,自然用時最短,貪心策略就是我們找到騎行最短時間的那個人即可,如果出發時間t<0,表示提前出發了,如果Charley追不上,則不起作用,如果Charley追上了,他的速度一定低于Charley,則不用考慮。
? ? ? ? 提示:這題的v單位是km/h
【參考代碼】
#include <stdio.h> #include <math.h> #define MIN 0x3f3f3f3f int main() {int i,n,t,time,min;double v;while(scanf("%d",&n) && n){min=MIN;for(i=1;i<=n;i++){scanf("%lf%d",&v,&t);if(t>=0){time=(int)(t+ceil(4500/(1000.0*v/3600))); //時間轉換為秒if(time<min)min=time;}}printf("%d\n",min);}return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1227
總結
以上是生活随笔為你收集整理的信息学奥赛一本通(1227:Ride to Office)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1061:求整数的和与
- 下一篇: 信息学奥赛一本通(2042:【例5.10