長さ $N$ の文字列 $S$ について考える。

$S$ の回文判定

$S$ を逆から見た文字列を $T$ とする。

$S$ と $T$ が一致したら回文である。

std::string t = s;
std::ranges::reverse(t);
if (s == t) {
	//process
}

回文の作り方 数え上げなど

例題

https://atcoder.jp/contests/abc363/tasks/abc363_d

k桁の回文について考える。

回文の性質より先頭を決めれば必然的に一番最後の文字も決定される。

つまり

先頭からi桁目を決定すればk-i+1桁目も自動的に決定される。

以上より回文を作るときは前半分だけ作れば残り半分も作れたことになる。

k桁の回文において先頭から$\frac{k+1}{2}$ 桁まで確定すれば残り半分も確定する。 (1-indexed)