PAT_A1012#ベストランク

ソース:

PAT A1012ベストランク(25分)

説明:

: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の INTB)
 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 }

 

おすすめ

転載: www.cnblogs.com/blue-lin/p/11203767.html