ABC468 A - Maximal Value

極大値

考え方

入力は整数と数列が $1$ つずつ。
int 型の変数と vector を $1$ つずつ用意し、cin で入力を受け取る。

問題に書いてある条件を満たすものがいくつあるかという話なので、全探索で数え上げる。
まず、forループで候補を全部用意する。
1-indexed と 0-indexed の違いに注意すると、以下のようにすればよい。

for (int i=0; i<n-2; i++) {

}

これで、最後の $2$ つ以外を全て選択肢として、$1$ つずつ条件を満たすかどうか判断すればよい。
問題に書いてある条件は、以下。

if (a.at(i)<a.at(i+1)&&a.at(i+1)>a.at(i+2)) {

}

最初にカウンター用の変数を $0$ 初期化で用意して、この if 文の中でそれを $1$ ずつ増やせばよい。

最後に、忘れずに cout でカウンターを出力しておしまい。

入力例1での動作

入力を受け取る。

n: 6
a: {3, 1, 4, 1, 5, 2}

$i=0,1,2,3$ について、連続する $3$ 要素を確認する。

$i$ $a[i],a[i+1],a[i+2]$ 条件
$0$ $(3,1,4)$ $3<1$ でないので満たさない
$1$ $(1,4,1)$ $1<4$ かつ $4>1$ なので満たす
$2$ $(4,1,5)$ $4<1$ でないので満たさない
$3$ $(1,5,2)$ $1<5$ かつ $5>2$ なので満たす

条件を満たすのは $i=1,3$ の $2$ 個なので、答えは $2$ となる。

注意点

問題文では $A_{i}<A_{i+1}>A_{i+2}$ と $1$ つの不等式にまとめて書いてある。
しかし、C++ではこの書き方はできない。
a.at(i)<a.at(i+1)&&a.at(i+1)>a.at(i+2) と、別々の不等式を && でつなぐ必要がある。

別解

特になし。