GCJ 2013 Qualification Round A

縦横斜めでXかOが揃ってないかチェック。
揃ってなかったら.があるかで終わってるかどうか判断
GCJ 2013 Qualification Round B

長方形の辺から垂直に反対の辺まで同じ高さでしか刈れない。
各行と列の最大値をチェックして
全要素で行と列両方の最大値より小さい値だとNG
GCJ 2013 Qualification Round C

10進数で回文の2乗が回文になるには
繰り上がりがあってはいけない(桁数増えるケースでいけるような気がするがそのときは最大桁と最小桁の値が一致しない)
回文なので筆算で各桁の合計値が最も大きくなるのは中央値(各桁の2乗×2の和、奇数桁のとき中央の値は2乗×1)
↑が9以内(繰り上がりない)組み合わせ列挙。
作る数字の桁数に合わせて足りない分0足して先頭桁が0にならないよう固定してpermutationで組み合わせ列挙。
あとは指定の範囲内にあるかチェック入れて数カウント。