[白俊]1966号:プリンタキュー



問題の内容によって、キューにpushやpopを1つずつ適用すると、またタイムアウトが発生するようなので、別の方法を考えることにしました.
キューの一番前のアイテムを最後に送信し、最後に送信...練習を重ねて、最終的にQは初めてと同じになります.項目間に位置変化はありません.
巡回の立場に立ってこの問題を考えると、Qを最初から最後まで巡回し、最初の繰り返しに戻るようなものだ.

優先度キューを受信すると、各優先度アイテムの数も受信されます.
最大優先度9から1の降順で、優先度のドキュメント数が完了するまでキューを繰り返し、これまでのドキュメント数(count)に増やします.
ターゲットによる優先度の計算が行われると、現在のインデックスとターゲットインデックスが同じ場合、count+1が出力されます.
T = int(input())

for _ in range(T):
    N, M = map(int, input().split())
    priority = [0] * 10
    queue = list(map(int, input().split()))

    for i in queue:
        priority[i] += 1

    idx = 0
    count = 0
    isBreak = False
    for i in range(1, 10):
        while priority[10 - i] > 0:
            if idx == M and 10 - i == queue[M]:
                print(count + 1)
                isBreak = True
                break
            if queue[idx] == 10 - i:
                priority[10 - i] -= 1
                count += 1
            idx = (idx + 1) % N
        if isBreak:
            break