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

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

AtCoder ABC 065 A - Expired? (灰色, 100 点)

これはちゃんと整理するの大変だと思う!

問題概要

ある商品は、賞味期限を過ぎてから  X 日後まではお腹を壊さずに食べることができる。一方、賞味期限を過ぎてから食べると美味しくありません。

その商品を、賞味期限の  A 日前に購入し、その日から  B 日後に食べた。以下のいずれであるかを判定せよ。

  • 美味しかった (賞味期限以前に食べた):"deliciouos"
  • 美味しくはなかったがお腹は壊さなかった:"safe"
  • お腹を壊した:"dangerous"

解法

ある絶対的な基準を設けて考えるのが楽だと思う。ここでは、


賞味期限の日を  0 [日目] としたときの、食べた日


を基準として考えることにする。この値は  B - A [日目] である。なぜならば、購入した日は  -A [日目] であり、その  B 日後に食べたからだ。

このとき、次のように整理できるだろう。

  •  B - A \le 0 のとき:賞味期限以前なので、"deliciouos"
  •  0 \lt B - A \le X のとき:"safe"
  •  B - A \gt X のとき:"dangerous"

ポイントは、 B - A の値のみで判定できることだ!!

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

int main() {
    int X, A, B;
    cin >> X >> A >> B;
    
    if (B - A <= 0) cout << "delicious" << endl;
    else if (B - A <= X) cout << "safe" << endl;
    else cout << "dangerous" << endl;
}