3672:Long Distance Racing
keyword
Greedy C
概要
少女はM(<10^7)秒間走る。前方にはT(<10^5)個の上り坂と平地と下り坂がある。少女はM秒のうちに出発点まで戻らなければならない。上り坂、平地、下り坂を走るのにそれぞれU,F,D秒かかる。少女はどこまで遠くにいけるか求める問題。家に帰るときは上りと下りが逆転することに気をつけること。
左から順に帰るときのコストも含めて距離を伸ばしていく。つまり上りと下りに区別はない。計算量O(T)。
int M, T, U, F, D; char way[100009]; int solve(){ int i, time=0; for(i=0;i<T;i++){ time += way[i] == 'f' ? 2*F : U+D; if(time > M) return i; } return T; }