うぉー、ついに自力で解けないB問題に遭遇。ABC 128 B

最後に残していたB問題。う、解けない…

リストinリストのソートです。

 

B - Guidebook / 


実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 200 点

問題文

あなたは美味しいレストランを紹介する本を書くことにしました。 あなたは N 個のレストラン、レストラン 1、レストラン 2、レストラン N を紹介しようとしています。レストラン i は Si 市にあり、あなたは 100 点満点中 Pi 点と評価しています。 異なる 2 個のレストランに同じ点数がついていることはありません。

この本では、次のような順でレストランを紹介しようとしています。

  • 市名が辞書順で早いものから紹介していく。
  • 同じ市に複数レストランがある場合は、点数が高いものから紹介していく。

この本で紹介される順にレストランの番号を出力してください。

制約

  • 1N100
  • S は英小文字のみからなる長さ 1 以上 10 以下の文字列
  • 0Pi100
  • Pi は整数
  • PiPj (1i<jN)

入力

入力は以下の形式で標準入力から与えられる。

N
S1 P1
:
SN PN

出力

N 行出力せよ。i 行目 (1iN) には、i 番目に紹介されるレストランの番号を出力せよ。


入力例 1 Copy

Copy
6
khabarovsk 20
moscow 10
kazan 50
kazan 35
moscow 60
khabarovsk 40

出力例 1 Copy

Copy
3
4
6
1
5
2

3 種類の市名は辞書順で kazan < khabarovsk < moscow です。 それぞれの市について、点数が高いレストランから順に紹介されていきます。よって、レストランは 3,4,6,1,5,2 の順に紹介されていきます。

こちらのサイトからカンニング

scrapbox.io

 

 

N = int(input())
L = []

for i in range(N):
S, P = input().split()
P = int(P)
L.append([S, P, i])

L = sorted(L, key=lambda x: (x[0], -x[1]))

for i in range(N):
print(L[i][2] + 1)

 

なるほど!sortedってそんな風につかえるのか!

まあ、最悪、2回ソートすればできるっちゃできる。