解いた問題

5/18/2012

SRM498 Div1 Easy

250

やるだけ。面倒。



vector<int> S;

bool f(int i)
{
  int x = S[i - 1];
  int y = S[i];
  int z = S[i + 1];
  if (x < y && y > z) return true;
  return false;
}


bool g(int begin, int end)     
{                       
  if (begin == end) return true;
  int diff = S[begin + 1] - S[begin];
  for (int i = begin; i < end; ++i) {
    if (diff != S[i + 1] - S[i]) return false;
  }
  return true;
}

class FoxSequence {
public:
  string isValid(vector <int> S_)
  {
    S = S_;
    for (int a = 1; a < (int)S.size(); ++a) {     
      for (int b = a + 1; b < (int)S.size(); ++b) {
        for (int c = b; c < (int)S.size(); ++c) {
          for (int d = c + 1; d + 1 < (int)S.size(); ++d) {          
            if (!f(a) || !f(d)) continue;
            if (b < c) {
              if (S[b] == S[b + 1]) ; else continue;
              if (S[c - 1] == S[c]) ; else continue;
            }
            if (g(0, a) && g(a, b) && g(b, c) && g(c, d) && g(d, S.size() - 1)) {
              return "YES";
            }
          }
        }
      }
    }

    return "NO";
  }
};