ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC152 D - Handstand 2

問題
提出コード

解法

(A,B)のうち、Aをある値に決めた際にペアの相手となりうるBの個数がいくらか、を高速で求めることができれば、Aについて全探索をして数え上げれば良いです。
Aの値を決め打ったときに、Bの末尾の値と先頭の値は固定されてしまいます。
前者はAの先頭(これをPとします)、後者はAの末尾(これをSとします)です。
これ以降は、S...Pとなるような数を、桁ごとに数え上げていきます。 まず、SPの値が等しいとき、Sという1桁の数がBの候補になります。答えに1加算します。 X桁(ただし2以上)のS...Pで、Bの候補になるようなものが何通りあるかを考えます。
まず、X桁の場合、少なくともS \times 10^{X-1} + P以上の数字であることが確定します。
そして、S...P...の部分は、X-2桁であり、00...0から99...9までの10^{X-2}通りあることがわかります。
これらのパターンが、N以下であるかどうかチェックしつつ加算するには、 min(10^{X-2},(N- S \times 10^{X-1} + P) /10 + 1)
を計算してあげればよいです。