fn main() { let mut N = 4; // gas station num let P = 10; // initial gas let L = 25; // distance let mut A: Vec<i32> = vec![10, 14, 20, 21]; // gas station distance let mut B: Vec<i32> = vec![10, 5, 2, 4]; // gas volume supply A.push(L); B.push(0); N += 1; let que; // manage gas station let mut ans = 0; // num of gas supply let mut pos = 0; // position let mut tank = P; // gas volume for i in 0..N { let d = A[i] - pos; // distance while (tank - d < 0) { if que.empty() { que.push(-1); return; } tank += que.top(); que.pop(); ans += 1; } tank -= d; pos = A[i]; que.push(B[i]); } println!("{}", ans); }
priority queはstackで大きい順に値を入れていく。