問題
http://community.topcoder.com/stat?c=problem_statement&pm=11219&rd=14427
解き方
システムテストで落ちないような実装の正確性が求められる問題。
共通処理は関数化し、各区間について点の不等号がどうであるか
正しく実装する。
コード
class FoxSequence {
public:
bool ispossible(vector<int> seq,int s,int e,int d){
for(int i=s;i<=e;i++)if(seq[s]+(i-s)*d!=seq[i])return false;
return true;
}
string isValid(vector<int> seq) {
int n=seq.size();
int at=0,next=0;
while(next+1<n && seq[next]<seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
at=next;
while(next+1<n && seq[next]>seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
while(next+1<n && seq[next]==seq[next+1])next++;
if(next>=n)return "NO";
at=next;
while(next+1<n && seq[next]<seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
at=next;
while(next+1<n && seq[next]>seq[next+1])next++;
if(at==next || next!=n-1)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
return "YES";
}
};
public:
bool ispossible(vector<int> seq,int s,int e,int d){
for(int i=s;i<=e;i++)if(seq[s]+(i-s)*d!=seq[i])return false;
return true;
}
string isValid(vector<int> seq) {
int n=seq.size();
int at=0,next=0;
while(next+1<n && seq[next]<seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
at=next;
while(next+1<n && seq[next]>seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
while(next+1<n && seq[next]==seq[next+1])next++;
if(next>=n)return "NO";
at=next;
while(next+1<n && seq[next]<seq[next+1])next++;
if(at==next || next>=n)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
at=next;
while(next+1<n && seq[next]>seq[next+1])next++;
if(at==next || next!=n-1)return "NO";
if(!ispossible(seq,at,next,seq[at+1]-seq[at]))return "NO";
return "YES";
}
};