結果
| 問題 |
No.3140 Weird Parentheses Game
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-16 23:02:46 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,147 bytes |
| コンパイル時間 | 11,770 ms |
| コンパイル使用メモリ | 398,468 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-10-15 05:16:37 |
| 合計ジャッジ時間 | 13,093 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 21 |
ソースコード
use proconio::{input, marker::Chars};
fn main() {
input! {
_n: usize,
s: Chars,
}
println!(
"{}",
if recursion(&s) != 0 {
"First"
} else {
"Second"
}
);
}
fn recursion(s: &[char]) -> usize {
if s.is_empty() {
return 0;
}
let mut grundy_numbers = vec![];
let mut left = 0_usize;
while left < s.len() {
let mut right = left;
let mut level = 0_usize;
loop {
if s[right] == '(' {
level += 1;
} else {
level -= 1;
}
right += 1;
if level == 0 {
break;
}
}
if left == 0 && right == s.len() {
let grundy = recursion(&s[1..s.len() - 1]);
return (grundy == 0) as usize;
}
grundy_numbers.push(recursion(&s[left..right]));
left = right;
}
grundy_numbers.sort_unstable();
grundy_numbers.dedup();
(0..grundy_numbers.len())
.find(|&i| i != grundy_numbers[i])
.unwrap_or(grundy_numbers.len())
}