【配列活用メニュー】> FINAL問題【配列に対しての複雑な処理】集団行動 (paizaランク C 相当) [難易度: 1759 ±17]
※リンク先へ移動するためには[paiza]へのログインが必要です。
あなたは集団行動のリーダーです。次のような指示を出すことで様々な列の操作ができます。
・swap A B
先頭から A 番目の人と、先頭から B 番目の人の位置を入れ替える。
・reverse
列の前後を入れ替える。
・resize C
先頭から C 人を列に残し、それ以外の人を全員列から離れさせる。ただし、列が既に C 人以下の場合、何も行わない。
初め、列には番号 1 〜 N の N 人がおり、先頭から番号の昇順に並んでいます。(1, 2 , 3, ..., N)
あなたの出した指示の回数 Q とその指示の内容 S_i (1 ≦ i ≦ Q) が順に与えられるので、全ての操作を順に行った後の列を出力してください。
入力値(例)
10 2
reverse
resize 7
出力値(例)
10
9
8
7
6
5
4
解答例
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 list($n, $q) = explode(" ", trim(fgets(STDIN))); for($i =1; $i <= $n; $i++) { $array[] = $i; } //print_r($array); $num = $array; for($i = 0; $i < $q; $i++) { $order = trim(fgets(STDIN)); if(strpos($order, "resize") !== FALSE) { list($resize, $c) = explode(" ", $order); $num = array_slice($num, 0, $c); } elseif(strpos($order, "swap") !== FALSE) { list($swap, $a, $b) = explode(" ", $order); $num2 = $num; $num2[$a - 1] = $num[$b - 1]; $num2[$b - 1] = $num[$a - 1]; $num = $num2; } elseif(strpos($order, "reverse") !== FALSE) { $num = array_reverse($num); } } //print_r($num); foreach($num as $value) { echo $value. "\n"; } ?> |