解いた問題

5/18/2012

SRM498 Div1 Easy

250

やるだけ。面倒。



  1. vector<int> S;  
  2.   
  3. bool f(int i)  
  4. {  
  5.   int x = S[i - 1];  
  6.   int y = S[i];  
  7.   int z = S[i + 1];  
  8.   if (x < y && y > z) return true;  
  9.   return false;  
  10. }  
  11.   
  12.   
  13. bool g(int begin, int end)       
  14. {                         
  15.   if (begin == end) return true;  
  16.   int diff = S[begin + 1] - S[begin];  
  17.   for (int i = begin; i < end; ++i) {  
  18.     if (diff != S[i + 1] - S[i]) return false;  
  19.   }  
  20.   return true;  
  21. }  
  22.   
  23. class FoxSequence {  
  24. public:  
  25.   string isValid(vector <int> S_)  
  26.   {  
  27.     S = S_;  
  28.     for (int a = 1; a < (int)S.size(); ++a) {       
  29.       for (int b = a + 1; b < (int)S.size(); ++b) {  
  30.         for (int c = b; c < (int)S.size(); ++c) {  
  31.           for (int d = c + 1; d + 1 < (int)S.size(); ++d) {            
  32.             if (!f(a) || !f(d)) continue;  
  33.             if (b < c) {  
  34.               if (S[b] == S[b + 1]) ; else continue;  
  35.               if (S[c - 1] == S[c]) ; else continue;  
  36.             }  
  37.             if (g(0, a) && g(a, b) && g(b, c) && g(c, d) && g(d, S.size() - 1)) {  
  38.               return "YES";  
  39.             }  
  40.           }  
  41.         }  
  42.       }  
  43.     }  
  44.   
  45.     return "NO";  
  46.   }  
  47. };