AtCoder Beginner Contest 275 C問題 Counting Squares
問題
提出解答
問題の概要
長さ の からなる文字列 がある.
座標平面において, に対して, であるとき, 座標 にポーンがあり, そうでないならばなにもない.
座標平面上の正方形のうち, 4つの頂点全てにポーンがあるのは何個か?
制約
- は長さ の からなる文字列
解法
正方形を作る際, 1辺とその辺に対してどちら側に正方形を作るかによって, 正方形が一意に定める.
ここで, 正方形をなす4頂点はある実数 と非負実数 を用いて,
と表せる.
この問題において, ポーンが存在するのは 座標が 以上 以下の整数であることから, の範囲において全探索, 以下のことをチェックすれば良い.
- 4頂点の 座標は全て 以上 以下か?
- (上の条件のもとで) ポーンが存在するか?
この全探索において, 同じ正方形を複数回カウントしてしまう可能性がある. これを防止する方法として, 条件を満たす正方形の4頂点を何かしらの方法で並び替えた (例えば辞書式順) 列の集合を作り, 最終的にその集合の大きさを答えれば良い.
計算量はポーンが存在しうる座標の最大値を として, である.