競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 287 参加

 

ABC287

A~Dの1000点.
D問題
先頭から調べるのと末尾から調べるのは, 同様の操作になるので関数化できる. \(s[0,i+1)\) と \(t[0,i+1)\) がマッチするのは,

  • \(s[0,i)\) と \(t[0,i)\) がマッチするかつ
    • \(s[i] = t[i]\) または
    • \(s[i] = ?\) または
    • \(t[i] = ?\)

であることと同値. 空文字列同士はマッチする.
E問題
試験後に解説を見てAC. 各 \(k\) に対して,答えが \(k\) になる \(i \in N\) を再帰で求める. 先頭 \(k\) 文字が一致しているという2項関係で\(N\) の元を類別する. \(k\) 文字目によって,類をさらに分解する. 類から削除するときは,新しい入れ物の中に入れて,古い入れ物とswap すると速い.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"