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