結果
| 問題 |
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,
}