観光スポットに行かないケースを毎回計算していると、O(n^2)の計算量になってしまいます。そこで以下のように考えます。A_4|$$となります。A_4|$$となります。これは以下のように総距離からの計算することが出来ます。A_2|$$よって、事前に総距離を計算しておけば、各ケースは定数時間で算出することが可能です。以下の実装では配列の先頭と末尾に座標0を設定することで、実装をシンプルにしています。時刻が1進む毎に上下左右のいずれかに1進めるので、次の場所に進むことを考えると・次の場所との距離(X座標とY座標の差の絶対値の和)が時刻の差に等しいがまず最もシンプルな条件になります。時刻の差が距離より大きい場合は、一旦次の場所に着いてから「隣の座標に移って戻る」を繰り返せば良いので・次の場所との距離(X座標とY座標の差の絶対値の和)と時刻の差が正の偶数であるというのがもう一つの条件になります。上記の条件に合うかどうかを順次チェックしていけば解けます。String問題https://atcoder.jp/contests/abc090/tasks/abc090_a解説1行目は1文字目、2行目は2文字目、3行目は3文字目を出力しておわり。Numbers問題https://atcoder.jp/contests/abc090/tasks/abc090_b解説AからBの整数について、一つずつ回文数かどうかをチェックしてカウントするだけです。実際にカードの反転処理をシミュレートして解こうとすると、計算量がO(N^2)になってしまって現実的では無いです。そのため、計算で解くことにします。最初はカードは表を向いているので、全ての操作を終えた後に「カードを偶数回操作していたら表」「カードを奇数回操作していたら裏」となります。2)で一般化できます。これを表にまとめると、以下のようになります。(N-2)x(M-2)あとは、NとMの場合分けで実装・・・ということになるのですが、もっとシンプルにすることが出来ます。