結果
| 問題 |
No.2099 [Cherry Alpha B] Time Machine
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-10-15 00:18:39 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,936 bytes |
| コンパイル時間 | 18,765 ms |
| コンパイル使用メモリ | 378,536 KB |
| 実行使用メモリ | 315,912 KB |
| 最終ジャッジ日時 | 2024-06-26 18:21:47 |
| 合計ジャッジ時間 | 41,433 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 59 WA * 13 |
ソースコード
use std::{collections::BinaryHeap, cmp::Reverse};
const INF: usize = 1usize << 60;
const OFFSET: usize = 10000001;
fn main() {
let mut t = String::new();
std::io::stdin().read_line(&mut t).ok();
let t: isize = t.trim().parse().unwrap();
let mut xa = String::new();
std::io::stdin().read_line(&mut xa).ok();
let xa: Vec<usize> = xa.trim().split_whitespace().map(|s| s.parse().unwrap()).collect();
let x = xa[0];
let a = xa[1];
let mut yb = String::new();
std::io::stdin().read_line(&mut yb).ok();
let yb: Vec<usize> = yb.trim().split_whitespace().map(|s| s.parse().unwrap()).collect();
let y = yb[0];
let b = yb[1];
let (t, start_cost) = if t < 0 {
let temp = t.abs() as usize / b + if t / b as isize == 0 { 0 } else { 1 };
let s = (b * temp) as isize + t;
(s, temp * y)
} else {
let temp = t as usize / a;
let s = t - (a * temp) as isize;
(s, temp * x)
};
let t = (t + OFFSET as isize) as usize;
let goal = t as usize;
let mut checked = vec![INF; OFFSET*2+1];
checked[OFFSET] = start_cost;
let mut pque = BinaryHeap::new();
pque.push((Reverse(start_cost), OFFSET));
while let Some((Reverse(cost), pos)) = pque.pop() {
if checked[goal] <= cost { break; }
if checked[pos] < cost { continue; }
if pos+1 < checked.len() && pos+1 <= goal && checked[pos+1] > cost + 1 {
pque.push((Reverse(cost+1), pos+1));
checked[pos+1] = cost+1;
}
if pos+a < checked.len() && pos < goal && checked[pos+a] > cost + x {
pque.push((Reverse(cost+x), pos+a));
checked[pos+a] = cost+x;
}
if pos >= b && pos > goal && checked[pos-b] > cost + y {
pque.push((Reverse(cost+y), pos-b));
checked[pos-b] = cost+y;
}
}
println!("{}", checked[goal]);
}