タイトル説明
そこリアルタイムRanklistですが、唯一のトップは、各質問のスコアを考慮せずに、ソート完了までの問題の数に従ってランクが上の今日の検査は、それが最終順位ではありません。入場料を考えると、あなたは降順で、最終的な候補者によってスコア、およびそのパフォーマンスのプリントを見つけるためのプログラムを書きます。
エントリー
入力はいくつかのテスト情報フィールドテストが含まれています。フィールド当たりの検査最初の情報線は候補N(0 <N <1000)の数を与え 、 試験の数M(0 <M <= 10 )、 スコアライン(正の整数)Gは、2行目の選別は、最初の質問に与えられます。 m個の質問の正の整数値を、N行、各行は、候補のチケット番号(文字列の長さが20を超えない)、総数M解決対象、タイトル、及び質問の数Mそれを与えられます(1からMまで被写体数)。 候補の数が0として読み取る場合、試験の入力端が処理されません。
輸出
各試験のために、隙間によって分離されたスコアライン候補番号候補に出力降順にスコアによって最初にn個以上の分数出力の最初の行の行、N行目の候補の数。より多くの候補者よりも同じスコアが、その候補数の昇順出力を押すと
サンプル入力
4 5 25
10 10 12 13 15
CS004 3 5 1 3
CS003 5 2 4 1 3 5
CS002 2 1 2
CS001 3 2 3 5
1 2 40
10 30
CS001 1 2
2 3 20
10 10 10
CS000000000000000001 0
CS000000000000000002 2 1 2
0
サンプル出力
3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
1の#include <stdio.hの> 2の#include < malloc関数 .H> 3の#include <アルゴリズム> 4の#include < 文字列・H> 5 使って 名前空間STDを、 6 7のtypedef 構造体STU { 8 チャー num_P [ 21 ]。 9 int型tol_slv。 10 のint flag_slv [ 12 ]。 11 INT getscore。 12 } STU。 13 ブールCMP(STU S1、S2 STU){ 14 、INT、T =strcmp(s1.num_P、s2.num_P) 15 IF(s1.getscore == s2.getscore)戻り T < 0 ; // 戻りT <0が上昇側ホイ列比較することを意味 16 他 戻り s1.getscoreを> s2.getscore; 17 } 18は、 INT (メイン){ 19。 INT num_P; 20である 一方(scanfの(" %のD "、&num_P)&& num_P> 0 && num_P < 1000 ){ 21は INT num_Q、num_G; 22は int型 =パス0 ; / / ライン以上の人々のレコード番号 23 scanf関数(" %D%D "、&num_Q、&num_G); 24 INT * Q_ary =(INT *)はmalloc(num_Q * はsizeof(INT )); 25 のために(INT I = 0 {;私は<num_Q I ++)/ / 各質問スコア読み出さ 26である scanfの(" %のD "、&Q_ary [I + 1 ]); // flag_slvと[] ALIGN 27 } 28 STU *スチューデント=(STU *)はmalloc(はsizeof(STU)* num_P)。 29 用(INT I = 0 {; I <num_P I ++)// 各生徒データは、初期化のため 30 scanfのを(" %S%D "、学生[I] .num_P、&学生[I] .tol_slv); // 科学号とにする質問の総数 31である ため(INT J = 0 ; J <学生[I] .tol_slv J ++ ){ 32 のint POS; 33である (scanfの" %のD "、&POS); 34である スチューデント[I] .flag_slv [POS] = 1 ; // タイトルにする編集位置 35 } 36 } 37 のために(INT I = 0 ; I <num_P; I ++){ // 各トラバース 38は 学生[I] .getscore = 0 ; // 初期化 39 のために(INT J = 0 ; J <num_Q; J ++){ // 各質問は、未だなさチェックする累積スコア 40 IF(スチューデント[I] .flag_slv [J + 1 ]){ 41である スチューデント[I] .getscore + = Q_ary [J + 1 ]; 42である } 43は 44である } 45 IF(スチューデント[I ] .getscore> = num_G)を通過++ ; 46であります 47 } 48 であれば(==通る0のprintf()を" 0 \ n " ); 49 他{ 50 のprintf(" %D \ n " 、パス)。 51 ソート(学生、学生+ num_P、CMP); 52 のために(INT iは= 0 ; I <num_Pは、I ++ ){ 53 場合は(学生[I] .getscore> = num_G){ 54 のprintf(" %sの%D \ n " 、学生[I] .num_P、学生[ i]の.getscore)。 55 } 56 } 57 58 } 59 60 61 } 62 リターン 0 。 63 }