[Sart]Boj 10825:国営数

1567 ワード

[Sart]Boj 10825:国営数


Link: https://www.acmicpc.net/problem/10825

質問する


道現の4つのクラスのN名の学生の名前と国語の英語の数学の点数をあげることができますこの場合、以下の条件で学生の成績をソートするプログラムを作成してください.
  • 国語の点数は減少順で
  • 国語の点数が同じで、英語の点数は増加順で
  • に並んでいる.
  • 国語の点数は英語の点数と同じで、数学の点数が減少する順番は
  • です.
  • すべてのスコアが同じ場合、名前はアルファベット順に増加します(ただし、アスキーコードでは大文字は小文字より小さいため、アルファベット順に並べられます).
  • 入力


    1行目は4つのクラスの学生数N(1≦N≦100000)を与えた.2行目からは、各行に1人の学生の名前、国語、英語、数学の点数がスペースで区切られています.分数が1以上、100以下の自然数.名前はアルファベットの大文字と小文字からなる文字列で、長さは10ビットを超えない.

    しゅつりょく


    問題のソート基準に従ってソートした後、最初の行からN行に各学生の名前を出力します.

    I/O例



    コード#コード#

    import sys
    si = sys.stdin.readline
    
    score = [[] for _ in range(N)]
    #입력 받아주기(이름, 국어, 영어, 수학)
    N = int(si())
    for i in range(N):
    	score[i] = list(si().split())
    	score[i][1:] = map(int,score[i][1:])
    
    #정렬(Key 값의 순서 중요)
    score.sort(key = lambda x:(-x[1],x[2],-x[3],x[0]))
    
    for x in score:
    	print(x[0])

    コードの概要

  • 名と成績を入力し、成績をintに変換して再保存します.
  • 並べ替えは順序が重要で、キー値を4種類に設定して並べ替えます.
    2-1. 最優先順位は国語の成績です.国語の成績が大きい順から羅列すればよいので、キー値「x[1]」の前にマイナス記号を付けて降順に並べます.
    2-2. 国語の成績と同じように、英語、数学、名前順にキー値を設定すればいい.
  • でソートされたリストの名前のみが出力されます.
  • Screenshot & Output