結果
| 問題 |
No.3144 Parentheses Modification and Rotation (01 Ver.)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-17 02:18:57 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 2,095 bytes |
| コンパイル時間 | 11,158 ms |
| コンパイル使用メモリ | 400,308 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-10-27 20:46:13 |
| 合計ジャッジ時間 | 13,189 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 39 |
ソースコード
use proconio::input;
use std::collections::VecDeque;
fn main() {
input! {
_n: usize,
s: String,
r: i64,
m: i64,
}
let a = s
.chars()
.map(|c| match c {
'(' => 1,
')' => -1,
_ => unreachable!(),
})
.collect::<Vec<_>>();
let mut deque = VecDeque::<Event>::new();
let mut start_value = 0;
let mut end_value = 0;
for (i, &x) in a.iter().enumerate() {
end_value += x;
while let Some(&Event { time: _, value }) = deque.front() {
if end_value <= value {
deque.pop_back();
} else {
break;
}
}
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, &x)| {
start_value += x;
end_value += x;
while let Some(&Event { time, value: _ }) = deque.front() {
if time < i {
deque.pop_front();
} else {
break;
}
}
while let Some(&Event { time: _, value }) = deque.front() {
if end_value <= value {
deque.pop_back();
} else {
break;
}
}
deque.push_back(Event {
time: s.len() + 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,
}