yukicoder No.929 よくあるボールを移動するやつ(★2)
問題:No.929 よくあるボールを移動するやつ - yukicoder
解答:#472383 (C++14) No.929 よくあるボールを移動するやつ - yukicoder
解法:b[i] = 0であるiを覚えておくキュー(zero)とb[i] >= 2であるiを覚えておくキュー(pos)を準備しておく。また、解答変数をansとする。
b[i] = 0のとき、もしposが空でなければ手前に2以上の項があり、そこから1をもらうことになるため、i - pos.top()をansに加える。posが空ならその先の2以上の項から1をもらうことになる。ひとまずzeroにiをpushする。
b[i] = 1のときは答えに影響しないためスルー。
b[i] >=2 のとき、もしzeroが空でなければ手前に0の項があり、そこに1をあげるため、i - pos.top()をansに加える。zeroが空ならその先の0の項に1をあげることになる。ひとまずposにiをpushする。pushの回数はb[i]の大きさにより増減する。