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}
個数を数える変数 result を $0$ で初期化する。
result: 0
$i=0$ のとき、a[0] からの $3$ つは $3,1,4$ である。
$3<1$ ではないので、条件を満たさない。
result は変更しない。
$i=1$ のとき、a[1] からの $3$ つは $1,4,1$ である。
$1<4$ かつ $4>1$ なので、条件を満たす。
result に $1$ 加える。
result: 1
$i=2$ のとき、a[2] からの $3$ つは $4,1,5$ である。
$4<1$ ではないので、条件を満たさない。
result は変更しない。
$i=3$ のとき、a[3] からの $3$ つは $1,5,2$ である。
$1<5$ かつ $5>2$ なので、条件を満たす。
result に $1$ 加える。
result: 2
最後に、result を出力すればよい。
注意点
問題文では $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) と、別々の不等式を && でつなぐ必要がある。
別解
特になし。