けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 097 A - Colorful Transceivers (灰色, 100 点)

ちょっと整理するのが大変な問題。

問題概要

一直線上の座標  a, b, c の点に、それぞれ A さん、B さん、C さんがいる。

2 人は、距離が  d 以内にいるとき、直接的に通信ができる。

A さんと C さんが、直接的に、あるいは間接的に、通信ができるかどうかを判定せよ。なお、間接的に通信ができるとは、A さんと B さんが直接的に通信できて、B さんと C さんが直接的に通信できることをいう。

解法

A さんと C さんが直接的に通信できるための条件は

`if (abs(a - c) <= d)'

などと書ける。そして、A さんと C さんが間接的に通信できるための条件は

if(abs(a - b) <= d && abs(b - c) <= d)

などと書ける。ポイントとして、

  • 距離は絶対値なので、関数 abs() が使えること (大小関係で場合分けして差をとるよりも楽)
  • 論理演算子「&&」の使い方

を確認しよう!

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    
    if (abs(a - c) <= d) cout << "Yes" << endl;
    else if (abs(a - b) <= d && abs(b - c) <= d) cout << "Yes" << endl;
    else cout << "No" << endl;
}