A - monotonically-increasing

2 secs 1024 MB
kusirakusira's icon kusirakusira

この問題ではプログラミングの基礎文法である if 文と for 文を組み合わせて解くことが出来ます。
実装のヒントは問題文に書いてあるので、それ通りに実装をしましょう。

「広義単調増大とは 1iN11≦i≦N-1 のすべての ii において AiAi+1A_i ≦ A_{i+1} を満たすことを言います」

以下のステップをたどることでこの問題を解くことが出来ます。 プログラミングでは 0-index であることに注意してください。(プログラムでは 1,2,3,4,5...1,2,3,4,5... ではなく 0,1,2,3,4...0,1,2,3,4... と数えるので、添え字がずれます。)

  1. for 文を回して、0iN10≦i<N-1 について配列 A[i]A[i] の要素を参照する。
    • AiAi+1A_i > A_{i+}1 であるならば No と出力し、プログラムを終了する。
  2. Yes を出力する。
Python3
n = int(input())
A = list(map(int,input().split()))
for i in range(n-1):
  if(A[i]>A[i+1]):
    print("No")
    exit()

print("Yes")

以下のように、1iN1≦i<N について Ai1AiA_{i-1} ≦ A_i であるかを判定する方法でもこの問題を解くことが出来ます。
for文の開始位置と終了位置は異なりますが、お互いのコードはどちらも同じことをしています。

C++
#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	vector<int> a(n);
	for(int i = 0; i < n; i++) cin >> a[i];

	string ans = "Yes";

	for(int i = 1; i < n; i++){
		if(a[i-1] > a[i]){
			ans = "No";
		}
	}

	cout << ans << endl;
}