Problem:
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

A: キャベツ / Cabbage

問題文

AOR イカちゃんは葉が $N$ 枚あるキャベツを手に入れた。
このキャベツの葉には外側から順に $1,\ldots,N$ の番号がついていて、$i$ 番目の葉の汚れ具合は $D_i$ である。
この値が大きいほど汚れ具合が酷いことを表す。
AOR イカちゃんはこのキャベツの葉を料理に使うため、廃棄する候補の汚い葉を以下の手順に従って選ぶことにした。

廃棄候補を空に初期化する。

まだ調べていない最も外側の葉に注目する。全て調べ終わっている場合は終了する。

その葉の汚れ具合が $A$ 以上であれば廃棄候補に加え、 2. に戻る。そうでなければ終了する。

しかし、この操作を行った結果、料理に使える葉が極端に少なくなってしまう場合があることに気がついた。
そこで、上記の操作後に捨てる葉を考えなおし、以下の操作を行うことにした。

廃棄候補でない葉が $M$ 枚未満であれば 2. に進む。そうでなければ終了する。

廃棄候補の葉のうちまだ調べていない最も内側の葉に注目する。廃棄候補の葉がない場合は終了する。

その葉の汚れ具合が $B$ 以下であれば廃棄候補から外し、 2. に戻る。
そうでなければ廃棄候補に残っている葉を全て廃棄し、終了する。

これらの操作を行ったとき、最終的に捨てる葉の枚数を求めよ。

入力

$N \ M \ A \ B$

$D_{1} \ D_{2} \ \cdots \ D_{N}$

入力の制約

$1 \leq N \leq 1000$

$0 \leq M \leq N$

$1 \leq A \leq B \leq 1000$

$1 \leq D_{i} \leq 1000$

出力

最終的に捨てる葉の数を出力せよ。

サンプル

サンプル入力1

5 3 6 9
9 7 5 3 1

サンプル出力1

2

一枚目と二枚目を捨てる。

サンプル入力2

5 3 6 9
5 4 3 2 1

サンプル出力2

0

一枚目から捨てない。

サンプル入力3

5 3 6 9
10 8 6 4 2

サンプル出力3

1

三枚目まで捨てようとするが考え直し、二枚目と三枚目を捨てないことにした。

サンプル入力4

5 3 6 9
5 10 8 6 4

サンプル出力4

0

二枚目が汚れていることを AOR イカちゃんは知らない。

サンプル入力5

5 0 6 9
9 9 8 8 7

サンプル出力5

5

全部捨てても気にしない。

Solution in Kotlin (judge verdict: Accepted)

import java.util.*

fun main(args:Array<String>?): Unit {
    val (n, m, a, b) = readLine()!!.trim().split(' ').map(String::toInt)
    val leaf = readLine()!!.trim().split(' ').map(String::toInt).toIntArray()
    val stack = Stack<Int>()
    for (l in leaf){
        if (l >= a) stack.add(l)
        else break
    }
    if (n - stack.size < m) {
        while(stack.isNotEmpty() && stack.peek() <= b){
            stack.pop()
        }
    }
    println(stack.size)
}