Official

A - Finding (((...))) Editorial by potato167


長さ \(2N\) の正しい括弧列 \(S\) のスコアは、\(S\) の前 \(N\) 文字に含まれる ( の数 \(c\)\(2\) 倍に等しいです。

\(N\) 文字から \(c\) 個の ( を取り出し、後 \(N\) 文字から \(c\) 個の ) を取り出すことで、\(S\) は長さ \(2c\) のよい文字列の部分列を含んでいることが確認できます。また、\(c\neq N\) であるとき、前から \(c + 1\) 文字目の ( が後 \(N\) 文字に含まれ、後から \(c + 1\) 文字目の ) が前 \(N\) 文字に含まれることから、\(S\) は長さ \(2c + 2\) のよい文字列の部分列を含んでいないことが示せます。

よって、長さ \(2N\) の正しい括弧列 \(S\) であって、\(S\) の前 \(N\) 文字に含まれる ( の数が \(K\) に等しいものの数を求めればよいです。

\(N\leq 2K\) であるとき、鏡像法などを用いて答えが \(\left(\binom{N}{K} - \binom{N}{K + 1}\right)^2\) であることが示せます。\(2K < N\) のときの答えは \(0\) です。

階乗などを時間計算量 \(O(\max(N))\) で前計算することで、テストケースあたり時間計算量 \(O(1)\) で答えを求めることができます。

posted:
last update: