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

zuka

APG4bを終えたので次はABSです。

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回はABC086C Travelingです。

実装

#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;
}

ポイント

今回おさえるべき内容

 偶奇に着目して条件分岐を行う典型パターン

偶奇によって結果が変わるような問題は頻出です。今回も「経過時間」と「移動距離」をパラメータとして偶奇に着目して考えていくパターンです。経過時間など「間隔」にまつわるデータはdxdyなどといった変数を用意して計算するようにすれば,見通しよくコーディングを行うことができます。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる