AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
AtCoder Regular Contest 009 B – おとぎの国の高橋君
AtCoder国での話だが、問題名に「おとぎの国」とあるので、つまりAtCoder国はおとぎの国ということだろうか。
変換、ソートまではそこまで悩まないだろう。
最後にソート後のAtCoder数をどう出力するか、という点がやや悩ましい。この回答ではAtCoder数字にインデックスを付ける感じで処理を行ったが、別途逆変換辞書を作成し、普通の数字のソート順に、逆変換して改めてAtCoder数字を出力~みたいなのでもいいのではないだろうか。
# AtCoder Regular Contest 009 B - おとぎの国の高橋君
# https://atcoder.jp/contests/arc009/tasks/arc009_2
# tag: 辞書変換 高橋君 AtCoder国
# AtCoder国と普通の数字の(文字列での)変換辞書を作成し、
# AtCoder数を文字列で受け取り、普通の数字へと変換後、
# ソートを行う
def main():
atcoder_n = [c for c in input().split()]
N = int(input())
atcoder_nums = [input() for _ in range(N)]
# 辞書作成
a_to_n = {k:str(v) for v, k in enumerate(atcoder_n)}
# 受け取ったAtCoder数字文字列 → 普通の数字文字列 → 数値と
# 変換した後、インデックス付きで保存していく
num_with_index = []
for i, a_num in enumerate(atcoder_nums):
n = int(''.join(a_to_n[c] for c in a_num))
num_with_index.append((n, i))
# ソート後、インデックスを元にしてAtCoder数で出力
num_with_index.sort()
for item in num_with_index:
print(atcoder_nums[item[1]])
main()
関連