【スタック・キューメニュー】> FINAL問題 箱とボール (paizaランク B 相当) [難易度: 2043 ±43]
※リンク先へ移動するためには[paiza]へのログインが必要です。
幅 1 の筒状の箱に数値の書かれた直径 1 のボールを入れます。各ボールは同じ数値のボールが隣合ったときに結合し、数値が 2 倍になります。それぞれ A_i と書かれた N 個のボールがあり、順番に箱の底へ入れていきます。最終的な箱の中のようすを、箱の天井から順に出力してください。
入力値(例)
6
3 2 5 5 4 3
出力値(例)
3
4
10
2
3
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php $n = trim(fgets(STDIN)); $a = explode(" ", trim(fgets(STDIN))); $box = []; for ($i = 0; $i < $n; $i++) { array_push($box, $a[$i]); while (count($box) >= 2) { $top1 = $box[count($box) - 1]; array_pop($box); $top2 = $box[count($box) - 1]; array_pop($box); if ($top1 == $top2) { array_push($box, $top2 * 2); } else { array_push($box, $top2); array_push($box, $top1); break; } } } while (count($box) > 0) { echo $box[count($box) - 1]. "\n"; array_pop($box); } ?> |