ソース:
説明:
:CSは、学生を専攻し、私たちの最初の年のパフォーマンスを評価するために、我々は唯一の3つのコースの成績を検討
C
プログラミング言語C、 -M
-数学(微積分やリニアAlgrbra)、およびE
-英語。平均時間では、我々は彼らの最高ランクに強調することによって、学生を奨励する-つまり、3つのコースと平均グレードに関して4つのランクの中で、私たちは各学生のための最高ランクを印刷します。例えば、の等級
C
、M
、E
およびA
- 4人の平均は、以下のように与えられます。StudentID C M E A 310101 98 85 88 90 310102 70 95 88 84 310103 82 87 94 88 310104 91 91 91 91
第一1は数学の第二1、英語での第3回1、および平均の最後の1ながら、Cプログラミング言語で最善を尽くしているので、その後、すべての学生のための最高ランクは1位です。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各ケースは、2つの数値を含む行で始まり N及び M(学生の総数は、それぞれ、それらのランクをチェックする生徒の数である≤)。次いで、 N行は、それぞれ順に、その学生の([0、100]の範囲内の)3つの整数の等級に続く6桁の文字列である学生IDが含まれ、従い
C
、M
そしてE
。そして、そこにある Mライン、学生IDを含む各が。
出力仕様:
それぞれについて、 Mの学生、1行にスペースで区切って、彼/彼女のために最高のランク、および対応するランクの記号を、印刷します。
ランキング方法の優先順位は次のように命じています
A
>C
>M
>E
。したがって、最も優先順位の高い同じ最高ランク、出力1を得るために、学生のための2つ以上の方法がある場合。学生はグレーディングリスト、単に出力にない場合
N/A
。
サンプル入力:
5 6 310101 98 85 88 310102 70 95 88 310103 82 87 94 310104 91 91 91 310105 85 90 90 310101 310102 310103 310104 310105 999999
サンプル出力:
1 C 1 M 1 E 1 A 3 A N/A
キー:
- シミュレーションタイトル
注意:
- 長い、頭蓋骨の痛み0,0を見つけるためにエラーを見つけるために、ソートする元の配列を取ります
コード:
1 / * 2 データ:2019年7月17日午後08時25分五十三秒 。3 問題:ランク#のPAT_A101のベスト 。4 AC:49:52 。5 。6 影響を受ける: 7 ランク 8 入力: 9の 最初の行は、学生の総数Nを与えます<= 2E3、クエリ数m <= 2E3 10 次にN行、ID、C、M、E 11。 次の行M、ID 12で 出力: 13の 自己ベスト、対応する被写体A> C> M> E 14は 存在しませんN / 15 * / 16 17の#include <cstdioを> 18であるの#include <アルゴリズム> 19。 使用した 名前空間STD; 20は CONST INT、M = 1E4 1E7 = H、N = 4。; 21 構造体ノード 22 { 23 のint ID; 24 INTの等級[N]、RNK [N]。 25 }インフォ[M]。 26 INTの MP [H] = { 0 }、ST [M]、キー; 27 チャーサブ[N] = { ' A '、' C '、' M '、' E ' }。 28 29 ブール CMP(CONSTの INTと、CONSTの INT&B) 30 { 31 戻る [A] .grade [キー]> [情報を見るには、[B]、[キー] .grade。 32 } 33 34 のint main()の 35 { 36 の#ifdef ONLINE_JUDGE 37 の#else 38 freopenは(" Test.txtを"、" R " 、STDIN)。 39 #endifの 40 41 のint N、M、R、ID。 42 のscanf(" %D%dの"、&N、&M)。 43 のために(int型 i = 1 ; iが<= N iが++ ) 44 { 45 のscanf(" %dの"、&インフォメーション[I] .ID)。 46 MP [インフォ[I] .ID] = I。 47 ST [I] = I。 48 のために(INT J = 1 ; J <N J ++ ) 49 のscanf(" %dの"、&インフォメーション[I] .grade [J])。 50 インフォ[I] .grade [ 0 ] = INFO [I] .grade [ 1 ] +インフォ[I] .grade [ 2 ] +インフォ[I] .grade [ 3 ]。 51 } 52 のために(INT I = 0; 私はNを<; 私は++ ) 53 { 54 キー= I。 55 ソート(ST + 1、ST + N + 1 、CMP)。 56 のために(INT J = 1 ; J <= N; J ++ ) 57 { 58 INT予備= stが[J- 1 ]、今= ST [j]は、 59 もし(jは== 1つの ||情報[前] .grade [i]を=!インフォ[今] .grade [i])と 60 R = J; 61 情報[今] [I] = .rnk R。 62 } 63 } 64 のために(int型 I = 0 ;私がm <I ++は) 65 { 66 のscanf(" %dの"、&ID)。 67 であれば(MP [ID] == 0 ) 68 { 69 のprintf(" N / Aの\ n " ); 70 続け; 71 } 72 INT最良= 0 。 73 のために(INT J = 1 J ++; J <N ) 74 もし(インフォ[MP [ID] RNK [J] < インフォ[MP [ID] RNK [最良]。) 75 最良= J。 76 のprintf(" %d個の%のCする\ n " 、インフォ[MP [ID] RNK [最良]、サブ[最良]。)。 77 } 78 79 戻り 0 ; 80 }