2002db
Problem B: Pile Up! 積み上げろ!
1,2,3,・・・,mと番号が付いてる箱がある。「どの番号の箱をどの番号の箱の上に置け」という指示が与えられる。操作を全て行うと、積み上げた箱の列ができる。積み上げた数が小さい順に表示する。
「AをBに置け」という指示の時、次の場合がある。
- AとBが違う列にある場合
- Aの上に何か乗っている場合は、乗っているものをすべて床に置いてからAを持ち上げる。
- Bの上に何か乗っている場合は、そのまま一番上にAを置く。
- AとBが同じ列にある場合
- AがBの下にある場合は、Aの上のものをすべて床に下ろしてから、AをBの上に置く。
- AがBの上にある場合は、命令を無視する。
- 「床に置け」という指示は「A 0」という命令になる。
入力
- まず、箱の数m
- 次にどの箱(I)を、どの箱(J)の上に置けと言う指示。IとJが0なら終了。
解答例
各列と、列にどの箱が置いてあるか、というデータ構造を2次元配列で表現し、命令どおりの処理を行う。処理が終わったら各列の個数を求め、ソートして小さい順に表示する。
- 河原 2002db1.c 無駄な処理があるかも。解けてないことが判明。