Python 安定ソート atcoder ABC323 B - Round-Robin Tournament
・参考
docs.python.org
・説明
2次元のリストにおいて、普通のソートと安定ソートを使った場合で比べる。降順のときは変わらないが昇順のときは2列目の値が小さいのから先に並び替える。
・例
ans=[[3, 0], [1, 1], [4, 2], [5, 3], [3, 4], [0, 5], [5, 6]] #普通のソート。 ans.sort() #[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]] ans.sort(reverse=True) #[[5, 6], [5, 3], [4, 2], [3, 4], [3, 0], [1, 1], [0, 5]] #安定ソート。 from operator import itemgetter ans=sorted(ans, key=itemgetter(0), reverse=True) #ansの0列に対して大きい順に並べて、同じ時ansの1列を見て小さい方を先に並び替える。 #[[5, 3], [5, 6], [4, 2], [3, 0], [3, 4], [1, 1], [0, 5]] ans=sorted(ans, key=itemgetter(0)) #ansの0列に対して小さい順に並べて、同じ時ansの1列を見て大きい方を先に並び替える。 #[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]]
・例題
atcoder.jp
・例題の実装例
n=int(input()) from operator import itemgetter cnt_idx=[i for i in range(n)] cnt=[0]*n for i in range(n): ox=input() for j in range(n): if ox[j]=='o': cnt[i]+=1 ans=[] for i in range(n): ans.append([cnt[i], cnt_idx[i]]) ans=sorted(ans, key=itemgetter(0), reverse=True) for i in range(n): print(ans[i][1]+1, end=" ")