結果
問題 |
No.3147 Parentheses Modification and Rotation (RM Ver.)
|
ユーザー |
|
提出日時 | 2025-05-17 02:28:14 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 6 ms / 2,000 ms |
コード長 | 1,767 bytes |
コンパイル時間 | 13,749 ms |
コンパイル使用メモリ | 385,284 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-05-17 02:28:30 |
合計ジャッジ時間 | 14,213 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 33 |
ソースコード
use proconio::input; use std::collections::VecDeque; fn main() { input! { n: usize, s: String, r: i64, m: i64, } let a = s .chars() .rev() .map(|c| match c { '(' => -1, ')' => 1, _ => unreachable!(), }) .collect::<Vec<_>>(); let mut deque = VecDeque::<Event>::with_capacity(2 * n); let mut start_value = 0; let mut end_value = 0; for (i, &x) in a.iter().enumerate() { end_value += x; while deque.back().map_or(false, |&e| end_value <= e.value) { deque.pop_back(); } deque.push_back(Event { time: i, value: end_value, }); } let ans = if (end_value - start_value) % 2 == 0 { std::iter::once((start_value, deque.front().unwrap().value, end_value)) .chain(a.iter().enumerate().map(|(i, &d)| { start_value += d; end_value += d; while deque.front().map_or(false, |&e| e.time < i) { deque.pop_front(); } while deque.back().map_or(false, |&e| end_value <= e.value) { deque.pop_back(); } deque.push_back(Event { time: n + i, value: end_value, }); (start_value, deque.front().unwrap().value, end_value) })) .enumerate() .map(|(i, (x, y, z))| ((x - y + 1) / 2 + (z - y + 1) / 2) * m + i as i64 * r) .min() .unwrap() } else { -1 }; println!("{ans}"); } #[derive(Debug, Clone, Copy)] struct Event { time: usize, value: i64, }