"()" を""に置換して、残った文字数が答え。std::stringのreplaceを初めて使ったらちょっとハマって20分かかってしまい166点。(同じ部屋の人はみなさん220-249)
点の個数が40個までなので個数に関してなんかループをまわすんだろうと思ったが、どうやって正方形の位置を決めるのかなど、その後良いアイデアが出ず。
名前忘れたけど赤コーダーのひとの解答が分かりやすかった。
点のx座標とy座標それぞれでソートしてユニークにして、そこから四重ループでx1 y1 x2 y2と決めていくと、すべての点の囲み方が列挙できる。さらに、x1-1 y1-1 x2+1 y2+1は正方形に入る予定の点群を含み、かつ入らない予定の点群を(線上を除いて)含まない最大の長方形を表すので、
あとは、含まれる点群とnlowから決まる正方形サイズと含まれない点群とnhighから決まる正方形サイズを求めて、前者の方が小さければそのパターンをsetに追加する。で最後にsetのサイズが答え。
パターンは2**40が表せればいいのでlong longで。
ポイントは、実際に解となる集合のサイズが2**40より大幅に小さいのと、正方形の具体的な場所が決まらなくてもサイズの条件からあり得るかどうか決まる、の二点のようだ。
ふむぅ..