競プロ典型90問をRustで解いていこう(Deque)9日目
はじめに
名探偵コナンの101巻買ってきました。 黒の組織の関係者っぽい人たちが、コナン君の周りにいすぎじゃね?とか 毛利小五郎の一家を死神家族と罵る刑事など見どころ満載でしたね。
近況報告としては、業務が地獄のような炎上を繰り返してる最中、親が亡くなり非常にグッと来るような出来事が立て続けにおきてました。
実家においていた本や、ジャンク品達をいよいよ処分しろとのお達しもあり片付けやらで追われています。 実家においていた漫画や小説、古くなった技術書の類をダンボール15箱ほど売りに出して、10000円ほどにしかなりませんでした。 売りに出した本たちは集めたときはそれはもう何十万とつぎ込み、一緒に歳を重ねてきたわけです。マブダチを失う喪失感はこんなもんなのかもしれません。
それでも捨てることができなかった漫画があります。
佐渡川 準先生の漫画達です。 マジで全部好きなんだけど…もう新作が見れないなんて…ホント…
私の一番好きな話は、無敵看板娘の12巻か11巻に入ってるマクドナルドが商店街にやってくるエピソードです。普段、仲が悪い(とても仲が良い)主人公と幼馴染が共闘してドナルド・マクドナルドを亡き者にしようとする話です。 事前調査としてテレビCM上の演出で、ロゴマークを指でなぞると光るシーンを見て「ビーム出すのか…」っていうシーンが特に好きです。
最終的には勝負を挑んで、自滅するのも含めて
基本は主人公達含め登場人物に常識がある人が居ないギャグ漫画なんですが、読み返してみると含蓄あるセリフが特徴的な漫画です。
例えば、「子供は放っておいても勝手に育つから、間違ったことをしたときに正して上げれば良い」というセリフもあって子供が生まれたからではないですが少し思うところはあるわけです。
とりあえず本題の競技プログラミングを進めましょう。
本日の問題
今日は上の記事から9問目を解いていきます。
061 - Deck(★2)を解いていこうと思います。
今回の問題は純粋に、Queueに前と後ろから詰め込んで取り出すだけで解ける問題でしたね。
061 - Deck(★2)
方針はQueueの配列を作って、前と後ろから詰め込んでいきます。
Rustでの回答例
ひとまずこのように書きました。
use proconio::input;
use std::collections::VecDeque;
fn main() {
input! {
n: usize,
tx: [(i32,i32);n],
}
let mut d = VecDeque::<i32>::new();
for i in 0..n {
match tx[i].0 {
1 => d.push_front(tx[i].1),
2 => d.push_back(tx[i].1),
_n => {
let m = tx[i].1 as usize;
println!("{}", d[m - 1])
}
}
}
}
まとめ
くっそ久しぶりにブログ更新しましたね。 Queueを使ってアレコレするのはちょくちょく業務でも使うのでとりあえず迷わずにかけましたね。 ソフト間で送受信するようなプログラムで、各ソフト間の通信を非同期にしたい場合とかに、要求と応答をQueueに詰め込んで1つずつ処理するとか、優先度付けて処理するとかそういうことが稀にあります。