título Descripción
el examen de hoy sobre si bien existen en tiempo real rangoLista, pero sólo la parte superior clasifican de acuerdo al número de temas para ordenar completado, sin tener en cuenta la puntuación de cada pregunta, que no es la clasificación final. Dada la admisión, se escribe un programa para encontrar la puntuación final de los candidatos y su rendimiento de impresión en orden descendente.
entrada
La entrada contiene varias pruebas prueba de campo de información. Examen primera línea de información por campo da el número de candidatos N (0 <n <1000) , número de exámenes M (0 <m <= 10 ), la línea de corte (número entero positivo) G; la segunda línea se da sorting a la primera pregunta valor positivo número entero de m cuestión; las N filas, cada fila se le da un número de ticket de candidatos (la longitud de cadena no exceda de 20), el número total m de resolución de tema, título, y número de preguntas que m (número de sujetos de 1 a M). Cuando el número de candidatos lee como 0, el extremo de entrada de no el examen de ser procesada.
exportación
Para cada prueba, el número de candidatos en la primera fila de la primera línea de la salida fraccional de no menos de n, entonces n fila por la puntuación en descendente de salida sobre el número candidato línea de rayado candidatos, separadas por un espacio entre ellos. Si la misma puntuación más de los candidatos, pulse su producción candidato número ascendente
entrada de la muestra
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
Ejemplo de salida
3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
1 #include <stdio.h> 2 #include < malloc .h> 3 #include <algoritmo> 4 #include < string .h> 5 usando espacio de nombres std; 6 7 typedef struct Stu { 8 Char num_P [ 21 ]; 9 int tol_slv; 10 int flag_slv [ 12 ]; 11 int getScore; 12 } Stu; 13 bool cmp (STU s1, s2 Stu) { 14 int t =strcmp (s1.num_P, s2.num_P); 15 IF (s1.getscore == s2.getscore) volver T < 0 ; // regreso T <0 que significa que el lado ascendente Hui comparación de cadena 16 el otro de retorno s1.getscore > s2.getscore; . 17 } 18 es int main () { 19. int num_P; 20 es el tiempo (Scanf ( " % D " , y num_P) && num_P> 0 && num_P < 1,000 ) { 21 se int num_Q, num_G; 22 es int Pass = 0 ; / / número récord de personas mayores de la línea 23 Scanf ( " % D% D " , y num_Q, y num_G); 24 int * Q_ary = ( int *) el malloc (num_Q * el sizeof ( int )); 25 para ( int I = 0 ; I <num_Q; i ++) { / / leer cada puntuación de pregunta 26 es Scanf ( " % D " , y Q_ary [I + 1. ]); // con flag_slv [] align 27 } 28 STU * Student = (STU *) el malloc ( el sizeof (STU) * num_P); 29 para ( int I = 0 ; I <num_P; i ++) { // para cada datos de los estudiantes de inicialización 30 Scanf ( " % S% D " , Student [I] .num_P, & Student [I] .tol_slv); // Ciencia No. y el número total de preguntas para hacer 31 es para ( int J = 0 ; J <Student [I] .tol_slv; J ++ ) { 32 int POS; 33 es Scanf ( " % D " , y POS); 34 es Student [I] .flag_slv [POS] = 1. ; // editar posición para hacer que el título 35 } 36 } 37 [ para ( int I = 0 ; I <num_P; i ++) { // cada poligonal 38 es Student [I] .getscore = 0 ; // initialize 39 para ( int J = 0 ; J <num_Q; J ++) { // cada pregunta a cheque hecho todavía, la puntuación acumulada 40 IF (Student [I] .flag_slv [J + 1. ]) { 41 es Student [I] .getscore + = Q_ary [J + 1. ]; 42 es } 43 es 44 es } 45 IF (Student [I ] .getscore> = num_G) Pass ++ ; 46 es 47 } 48 Si (pasa == 0 ) printf ( " 0 \ n " ); 49 otra cosa { 50 printf ( " % d \ n " , pase); 51 tipo (estudiante, estudiante + num_P, cmp); 52 para ( int i = 0 ; i <num_P; i ++ ) { 53 si (estudiante [i] .getscore> = num_G) { 54 printf ( " % s% d \ n " , estudiante [i] .num_P, estudiante [ i] .getscore); 55 } 56 } 57 58 } 59 60 61 } 62 de retorno 0 ; 63 }