ブログ名

競技プログラミングやお歌のお話をする高菜です。

AtCoder Beginner Contest 167 解法

結果

f:id:ngtkana:20200510222036p:plain

お客様の中に、D に嵌ってしまった黄色コーダーさんはいらっしゃいますか?

解法

A: 先頭の len(s) 文字を比較です。

B: min(a, k) - max(k-a-b, 0) です。

C: ビット全探索です。C に全探索を置くの、強い主張を感じざるをえません。

D: シュミレーションで、周期としっぽの長さを計算です。しっぽに属するときだけ 0-based index で出力して 3 WA です。(はい!?)

E: k 組以上 → ぴったり → 以下 のように、包除 2 回をします。なのですが、これでは 2 乗和になりますから、1 回目の包除はクローズドフォーミュ ラに変形です。

F: 括弧列を抽象化して、底辺を基準に左の高さと右の高さのペアだと思うことにします。すると、隣り合う 2 つのどちらを左にするとよいかが決まります。これは狭義の弱順序ですから、C++ のソートが使えます。順番が決まりましたら、シュミレーションです。

余談

Wolfram Alpha 先生によると、E の 2 回目の包除([ tex: (1+q) ] の部分和に何かを代入した形)はこのようにかけるそうです。Hypergeometric Function とはなんなのでしょう。定義をググった感じ、定数時間で計算できるとは思えませんし、これ以上の高速化は難しいでしょうか。

\sum _ { i = 0 } ^ k \binom(n, i) * x ^ i - Wolfram|Alpha

評価

D には触れない方針です。

E、F は、易しめだったとはいえ、かなり順調でした。

問題は C でしょうか。何故か M 元集合の bit DP が過り、難しすぎませんか? をしていました。

ところで D には触れない方針です。