#AtCoderBeginnerContest136_C
以下のような問題に取り組んでいますが、うまく正答が出せないためアドバイスをいただきたいです。
[問題]
左右一列に N個のマスが並んでおり、左から i番目のマスの高さは Hiです。あなたは各マスについて 1度ずつ次のいずれかの操作を行います。マスの高さを 1低くする。何もしない。操作をうまく行うことでマスの高さを左から右に向かって単調非減少にできるか求めてください。入力は全て整数である。
1≤N≤10の5乗 1≤Hi≤10の9乗
##実装
cpp
1#include <bits/stdc++.h> 2using namespace std; 3using ll = long long; 4const long long INF = 1LL << 60; 5 6int main(){ 7 int N; 8 cin >> N; 9 vector<int> V(N); 10 for(int i=0; i<N; i++) cin >> V[i]; 11 12 for(int i=0; i<N; i++) { 13 if (i < N-1) { 14 if(V[i] - V[i+1] > 1) { 15 cout <<"No" << endl; 16 return 0; 17 } 18 } 19 if (i < N-2) { 20 if(V[i] >= V[i+1] && V[i+1] > V[i+2]) { 21 cout << "No" << endl; 22 return 0; 23 } 24 } 25 } 26 cout << "Yes" << endl; 27}
以上のコードで問題のケースを網羅していると考えていたのですが、正答が出ませんでした。
2ケースほど。
どのようなケースについて考えられていないのかアドバイスをいただけると幸いです。
またコードとしてあまり読みやすいとは言えない(良いコードとは言えない)と思っています。
コードに対する改善点もあればアドバイスをいただけるとありがたいです。
初歩的な質問で申し訳ございませんが、よろしくお願いいたします。
AtCoderには解説がありますよ。解説を見たくないということでしょうか?
https://img.atcoder.jp/abc136/editorial.pdf
公式ではないですが問題名などで検索れば大抵解答例もあります。
https://yamakasa.net/atcoder-abc-136-c/