9a1914336e 2011-03-08 kinaba: #include <iostream> 9a1914336e 2011-03-08 kinaba: #include <sstream> 9a1914336e 2011-03-08 kinaba: #include <iomanip> 9a1914336e 2011-03-08 kinaba: #include <vector> 9a1914336e 2011-03-08 kinaba: #include <string> 9a1914336e 2011-03-08 kinaba: #include <map> 9a1914336e 2011-03-08 kinaba: #include <set> 9a1914336e 2011-03-08 kinaba: #include <algorithm> 9a1914336e 2011-03-08 kinaba: #include <numeric> 9a1914336e 2011-03-08 kinaba: #include <iterator> 9a1914336e 2011-03-08 kinaba: #include <functional> 9a1914336e 2011-03-08 kinaba: #include <complex> 9a1914336e 2011-03-08 kinaba: #include <queue> 9a1914336e 2011-03-08 kinaba: #include <stack> 9a1914336e 2011-03-08 kinaba: #include <cmath> 9a1914336e 2011-03-08 kinaba: #include <cassert> 9a1914336e 2011-03-08 kinaba: #include <cstring> 9a1914336e 2011-03-08 kinaba: using namespace std; 9a1914336e 2011-03-08 kinaba: typedef long long LL; 9a1914336e 2011-03-08 kinaba: typedef complex<double> CMP; 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: class FoxSequence { public: 9a1914336e 2011-03-08 kinaba: string isValid(vector <int> seq) 9a1914336e 2011-03-08 kinaba: { 9a1914336e 2011-03-08 kinaba: for(int b=2; b<seq.size(); ++b) 9a1914336e 2011-03-08 kinaba: for(int c=b; c<seq.size()-2; ++c) 9a1914336e 2011-03-08 kinaba: if( isFox(seq,b,c) ) 9a1914336e 2011-03-08 kinaba: return "YES"; 9a1914336e 2011-03-08 kinaba: return "NO"; 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: bool isFox( const vector<int>& seq, const int b, const int c ) 9a1914336e 2011-03-08 kinaba: { 9a1914336e 2011-03-08 kinaba: for(int i=b; i<=c; ++i) 9a1914336e 2011-03-08 kinaba: if( seq[i] != seq[b] ) 9a1914336e 2011-03-08 kinaba: return false; 9a1914336e 2011-03-08 kinaba: return isUpDown(seq, 0, b) && isUpDown(seq, c, seq.size()-1); 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: bool isUpDown( const vector<int>& seq, const int L, const int R ) 9a1914336e 2011-03-08 kinaba: { 9a1914336e 2011-03-08 kinaba: int i = max_element(seq.begin()+L, seq.begin()+R+1) - seq.begin(); 9a1914336e 2011-03-08 kinaba: if( L<i && i<R ) 9a1914336e 2011-03-08 kinaba: { 9a1914336e 2011-03-08 kinaba: if( seq[L+1]>seq[L] && isArith(seq, L, i, seq[L+1]-seq[L]) 9a1914336e 2011-03-08 kinaba: && seq[R-1]>seq[R] && isArith(seq, i, R, seq[i+1]-seq[i]) ) 9a1914336e 2011-03-08 kinaba: return true; 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: return false; 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: bool isArith( const vector<int>& seq, const int L, const int R, int d ) 9a1914336e 2011-03-08 kinaba: { 9a1914336e 2011-03-08 kinaba: for(int i=L; i+1<=R; ++i) 9a1914336e 2011-03-08 kinaba: if( seq[i+1]-seq[i] != d ) 9a1914336e 2011-03-08 kinaba: return false; 9a1914336e 2011-03-08 kinaba: return true; 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: }; 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: // BEGIN CUT HERE 9a1914336e 2011-03-08 kinaba: #include <ctime> 9a1914336e 2011-03-08 kinaba: double start_time; string timer() 9a1914336e 2011-03-08 kinaba: { ostringstream os; os << " (" << int((clock()-start_time)/CLOCKS_PER_SEC*1000) << " msec)"; return os.str(); } 9a1914336e 2011-03-08 kinaba: template<typename T> ostream& operator<<(ostream& os, const vector<T>& v) 9a1914336e 2011-03-08 kinaba: { os << "{ "; 9a1914336e 2011-03-08 kinaba: for(typename vector<T>::const_iterator it=v.begin(); it!=v.end(); ++it) 9a1914336e 2011-03-08 kinaba: os << '\"' << *it << '\"' << (it+1==v.end() ? "" : ", "); os << " }"; return os; } 9a1914336e 2011-03-08 kinaba: void verify_case(const string& Expected, const string& Received) { 9a1914336e 2011-03-08 kinaba: bool ok = (Expected == Received); 9a1914336e 2011-03-08 kinaba: if(ok) cerr << "PASSED" << timer() << endl; else { cerr << "FAILED" << timer() << endl; 9a1914336e 2011-03-08 kinaba: cerr << "\to: \"" << Expected << '\"' << endl << "\tx: \"" << Received << '\"' << endl; } } 9a1914336e 2011-03-08 kinaba: #define CASE(N) {cerr << "Test Case #" << N << "..." << flush; start_time=clock(); 9a1914336e 2011-03-08 kinaba: #define END verify_case(_, FoxSequence().isValid(seq));} 9a1914336e 2011-03-08 kinaba: int main(){ 9a1914336e 2011-03-08 kinaba: 9a1914336e 2011-03-08 kinaba: CASE(0) 9a1914336e 2011-03-08 kinaba: int seq_[] = {1,3,5,7,5,3,1,1,1,3,5,7,5,3,1} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "YES"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(1) 9a1914336e 2011-03-08 kinaba: int seq_[] = {1,2,3,4,5,4,3,2,2,2,3,4,5,6,4} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "YES"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(2) 9a1914336e 2011-03-08 kinaba: int seq_[] = {3,6,9,1,9,5,1} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "YES"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(3) 9a1914336e 2011-03-08 kinaba: int seq_[] = {1,2,3,2,1,2,3,2,1,2,3,2,1} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "NO"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(4) 9a1914336e 2011-03-08 kinaba: int seq_[] = {1,3,4,3,1,1,1,1,3,4,3,1} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "NO"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(5) 9a1914336e 2011-03-08 kinaba: int seq_[] = {6,1,6} 9a1914336e 2011-03-08 kinaba: ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = "NO"; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: /* 9a1914336e 2011-03-08 kinaba: CASE(6) 9a1914336e 2011-03-08 kinaba: int seq_[] = ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = ; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: CASE(7) 9a1914336e 2011-03-08 kinaba: int seq_[] = ; 9a1914336e 2011-03-08 kinaba: vector <int> seq(seq_, seq_+sizeof(seq_)/sizeof(*seq_)); 9a1914336e 2011-03-08 kinaba: string _ = ; 9a1914336e 2011-03-08 kinaba: END 9a1914336e 2011-03-08 kinaba: */ 9a1914336e 2011-03-08 kinaba: } 9a1914336e 2011-03-08 kinaba: // END CUT HERE