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で大きい順に値を入れていく。