SRM 503 Div2 Medium ToastXToast

問題

ToastManはeye-poppingなトーストを作ろうとしている.eye-poppingなトーストはトーストをX分焼いたものでX未満だとunder toasted, Xより大きいとover toastedになってしまう.各トーストはeye-poppingな時間が違う.ToastManはいくつかの種類のトーストを焼こうと思ったが,残念なことにどれだけ焼けばeye-poppingになるのか知らなかったため,全てunder toasted もしくはover toastedになってしまった.undertoastedになってしまった時間,overtoastedになってしまった時間が与えられた時,ToastManが焼いたトーストの最小種類を求めよ.

解答

公式の解説がイラスト付きで素晴らしく分かりやすい.問題をよく観察すると答えがある場合は1, 2のどちらからしい.
Login - TopCoder Wiki

#define SORT(c) sort((c).begin(),(c).end())

class ToastXToast {
public:
  int bake(vector <int> undertoasted, vector <int> overtoasted) {
    // int res;
    SORT(undertoasted);
    SORT(overtoasted);
    int n = undertoasted.size();
    int m = overtoasted.size();
    if (undertoasted[n-1] < overtoasted[0] ) return 1;
    if (undertoasted[0] < overtoasted[0] && undertoasted[n-1] < overtoasted[m-1]) return 2;
    return -1;
  }
};