【クエリメニュー】> FINAL問題 Vtuber (paizaランク B 相当) [難易度: 2139 ±36]
※リンク先へ移動するためには[paiza]へのログインが必要です。
あなたは流行に乗っかり、Vtuber としての活動をスタートしました。活動も軌道にのり、配信をするたびに視聴者が superchat を送ってくれたり、メンバーシップ制度に加入してくれるようになりました。
(わからない方は 「youtube superchat」「youtube membership」 などで検索してみてください。)
あなたはお礼として superchat を読むお礼配信をおこなうことにしました。
その配信で、前回の配信の superchat の総額が高いアカウントから順に、superchat をした全てのアカウントの名前を読んだ後、メンバーシップに入ってくれた全てのアカウントの名前を辞書順昇順で読むことにしました。
superchat の金額が同じ場合、同じ金額の中で辞書順降順でアカウント名を読むことにしました。
前回の配信の superchat とメンバーシップ加入の履歴が与えられるので、読む順番にアカウント名を出力するプログラムを作成してください。
・1 行目では、superchat とメンバーシップ加入の回数の和 N が与えられます。
・続く N 行のうち、 i 行目では、i 番目のイベントの内容 E_i が以下のいずれかの形式で与えれられます。
name give money !
name さんが money 円の superchat を送ったことを表す。
name join membership!
name さんがメンバーシップに加入したことを表す。
入力値(例)
5
aiueo give 2489 !
kk join membership!
coffee_addiction join membership!
so_cute give 837 !
yoyo give 9284 !
出力値(例)
yoyo
aiueo
so_cute
coffee_addiction
kk
解答例
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 33 34 35 36 37 38 39 40 |
<?php $n = trim(fgets(STDIN)); $member = []; $chat = []; for ($i = 0; $i < $n; $i++) { $event = explode(" ", trim(fgets(STDIN))); $name = $event[0]; $verb = $event[1]; if ($verb == "join") { array_push($member, $event[0]); } else { $money = $event[2]; if (isset($chat[$name])) { $chat[$name] = array($chat[$name][0]+$money, $name); } else { $chat[$name] = array($money, $name); } } } //print_r($chat); rsort($chat); sort($member); foreach ($chat as $key => $value) { echo $value[1]. "\n"; } foreach ($member as $value) { echo $value. "\n"; } ?> |