プログラミング

【競プロ精進日記】ABS編<11>

本記事は管理人が競技プログラミングを始めたため,その精進日記としてログを取ったものです。アウトプットして積極的にモチベーションを上げていく作戦です。記事目次は以下をご覧ください。

内容は管理人の推測や恣意的な感想を大いに含みます。もし間違い等ありましたらご指摘ください。あくまでも参考程度にお願い致します。

【競プロ精進日記】目次まとめ ABC Atcoder Beginner Contestの過去問を解いています。最低限のコメントと一言が添えられています。 ...

AtCoder Beginners Selection

AtCoder Beginners Selectionの問題を1から解いていくシリーズです。使用言語はc++とpythonです。今回はABC086C Travelingです。

c++

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
  int N = 0;
  cin >> N;
  int t_0 = 0;
  int x_0 = 0;
  int y_0 = 0;
  int t, x, y = 0;
  rep(i, N){
    int dt, dx, dy = 0;
    cin >> t >> x >> y;
    dt = abs(t - t_0);
    dx = abs(x - x_0);
    dy = abs(y - y_0);

 // 前の値の保持
    t_0 = t;
    x_0 = x;
    y_0 = y;

    // もし経過時間よりも移動距離の方が長かったらダメ
    if (dt < dx + dy){
      cout << "No" << endl;
      return 0;
    }

    // もし経過時間と距離の偶奇が違ったらダメ
    else if (dt % 2 != (dx + dy) % 2){
      cout << "No" << endl;
      return 0;
    }
  }

 // その他はOK
  cout << "Yes" << endl;
}

python

N = int(input())

t_0 = 0
x_0 = 0
y_0 = 0

# プランが実行可能か判断するフラグ
flag = True

for n in range(N):
  t, x, y = map(int, input().split())
  dt = abs(t - t_0)
  dx = abs(x - x_0)
  dy = abs(y - y_0)

 # 前の値を保持
  t_0 = t
  x_0 = x
  y_0 = y

  if dt < (dx + dy):
    flag = False
  elif (dt % 2 != (dx + dy) % 2):
    flag = False

if flag == True:
  print("Yes")
else:
  print("No")

pythonも方針は同様です。flagなど用意せずに,無理なプランが生じた場合はすぐに”No”を出力してexit()しても良いのですが,サンプルケースをローカルで試すときに,すぐさま”No”を出力してしまうと標準出力が改行されずに出て見えにくいので,flagを用意した次第です。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です