オンラインコースプラットフォームにおける最大の課題の1つは、学生の800以上のコースの一つに推薦することです。
例えば、ジョアンはそれぞれ、等級10および9で、Web用のJavaおよびJavaにコースを取りました。彼は次は何を推奨すべきですか?我々は彼に彼のプロフィールに行きませんはるかに困難にはるかに簡単なもの、あるいは単に何かをお勧めしている場合、我々は彼の時間を無駄にします。学部学生が適切なコースを選択し、不良による選択に学期を無駄にしないために非常に慎重であるように、私たちは最高の選択を行うために、このプラットフォームで学生を支援したいです。
この問題では、我々は、(N)の学生と(M)のコースを持っています。学生は(1)からのコースは、(M)に、1から(N)に番号が付けられています。各学生のために、私たちは彼または彼女はすでに取って、それぞれの学年どのコースを知っています。学生へのコースをお勧めするために、我々は最初に彼または彼女に最も近い別の学生を見つけます。2人の学生の間の距離は、両方の学生が取ったコースの成績との間のユークリッド距離として定義されます。何も共有コースがない場合、距離が無限大であると定義されます。すでに一番近い学生が撮影したコースの中で、我々はすでに、元学生によって取られなかった最高グレードでコースをお勧めします。同点の場合は、最小のインデックスを持つコースをお勧めします。元学生はすでに彼の最も近い学生が撮影されたすべてのコースを取った場合、勧告を行うことはありません。
あなたの仕事は、プラットフォーム内のすべての学生にコースをお勧めプログラムをコーディングすることです。
入力
最初の行は二つの整数あり N Nと MはそれぞれM、学生やコースの数を、。この後行の(N)ブロックがあり、それぞれが整数(Q_I)とライン、既に(I)番目の学生、および次いで(Q_I)線で撮影したコースの量は、2つの整数を(含む各一方を含みますc)及び(G)、(I)番目の生徒はもちろん(C用グレード(g)を得たことを示しています)。
制約
- 2 ≤ N ≤ 100 2≤N≤100
- 1 ≤ M ≤ 100 1≤M≤100
- 1つの≤ Q I 、C ≤ M 1≤Qi、c≤M
- 0 ≤ G ≤ 10 0≤g≤10
- あなたは、各学生が既に他の生徒が撮った、少なくとも1つのコースをとっていることを仮定してもよいです。
出力
印刷(I)番目のラインが学生(i)番目にお勧めのコースを持っている(N)ライン、。学生(i)は、すでに彼の最も近い学生はすでに、印刷(-1)を取ったすべてのコースを取った場合。
例
2 3 2 1 10 2 10 2 2 9 3 5
3 1
2 4 3 1 7 2 8 3 10 3 10 4 2 9 1 5
4 3
注意
最初の例では、学生との間の距離は次式で与えられる。 √(10-9)2
第二に、それがby√与えられる (7 - 5 )2 + (8 - 9 )2
質問の意味:
選択科目、人々(A)の人々勧告の(B)に最も近い人々に耳を傾けるだろう、Bは鎧することをお勧めだろうと鎧は、対象の自分のハイスコアを学んだことはありません
推奨される尋ねる何
アイデア:
この質問は、(タイトルを読んで、まだ英語で十分に、この質問のテストです)思考範囲100、結果的に書くことを敢えて必要としない、暴力を持っていました
1の#include <stdio.hの> 2の#include < ストリング・H> 3 のconst int型 INF = 0x3f3f3f3f 。 4 5 INT )(メイン 6 { 7 INTの N、M、[ 105 ] [ 105 ]、I、J、K、X; 8 int型KE、沼地、ミンクス。 9 int型ミネソタ州。 10 のint RELA [ 105 ] [ 105 ]。 11 のmemset( - 1、はsizeof (a)参照)。 12 のmemset(RELA、INF、はsizeof(RELA))。 13 のscanf(" %D%dの"、&N、&M)。 14 のために(i = 1 ; iが<= N iが++ ) 15 { 16 のscanf(" %dの"、およびX) 17 一方(x-- ) 18 { 19 のscanf(" %D%dの"、およびKE、およびFEN)。 20 [I] [KE] = FEN。 21 } 22 } 23 24 のための(I = 1; I <= N。私は++ ) 25 { 26 用(J = 1 ; J <= N; J ++ ) 27 { 28 用(K = 1 ; K <= M; ++ kは) 29 { 30 場合(I = J && [I] [K]! = - 1 && [J] [K] =! - 1 ) 31 { 32 であれば(RELA [I] [J] == INF) 33 RELA [I] [J] =([I] [K] -a [J] [K])*([I] [K] - [J] [K])。 34 他の - [I] [j]はRELA [I] [J] +([I] [K] -a [J] [K])*([I] [K] = RELA [j]を[ K])。 35 } 36 } 37 } 38 } 39 40 用(i = 1 ; iが<= N; iは++ ) 41 { 42 ミネソタ州= INF。 43 のために(J = 1 ; J <= N; J ++ ) 44 { 45 であれば(RELA [I] [J] <ミネソタ&& I =!J) 46 { 47 ミネソタ州= RELA [I] [J]。 48 ミンクス= J; 49 } 50 } 51 もし(ミネソタ州== INF)のprintf(" -1のn \ " ); 52 53 他の 54 { 55 INTミンク= INF、MAXF = - 1 。 56 のために(J = 1 ; J <= Mであり、j ++ ) 57 { 58 であれば([I] [J] =! - 1)続けます。 59 であれば([ミンクス] [J]> MAXF) 60 { 61 MAXF = A [ミンクス] [J]。 62 ミンク= J; 63 } 64 } 65 であれば(ミンク== INF || MAXF == - 1)のprintf(" -1の\ n " ); 66 他の printf関数(" %d個の\ nを" 、ミンク)。 67 } 68 } 69 70 戻り 0 ; 71 }