解いた問題

2/08/2012

SRM481 Div1 Easy

250
嘘を吐かれた上で嘘を吐いている人数を決めて確認していく。
17行目の条件を最後まで見落として悲しい思いをした。
class ChickenOracle {
public:
  string theTruth(int n, int e, int l1, int l2)
  {
    const string E = "The egg";
    const string C = "The chicken";
    const string T = "The oracle is a lie";
    const string A = "Ambiguous";

    int c = n - e;

    bool egg, chi;
    egg = chi = false;

    for (int l = 0; l <= min(l1, l2); ++l) {
      int ll = l1 + l2 - 2 * l;
      if (n - ll - l < 0) continue;
      if (c == ll && e == n - ll) egg = egg || true;
      if (e == ll && c == n - ll) chi = chi || true;
    }

    if (egg && chi) return A;
    if (egg) return E;
    if (chi) return C;

    return T;
  }
};

0 件のコメント :

コメントを投稿