Experimento 2 Clasificación de puntaje B

Titulo

El sistema de evaluación en tiempo real utilizado para programar el trabajo de pensamiento y los experimentos tiene las características de obtener clasificaciones en el tiempo ¿Cómo se realiza su función?
Después de que terminemos minuciosamente el programa que no pudimos soportar mirarlo directamente y lo enviamos, el sistema de evaluación devolverá AC u otros errores. No importa cuál sea el método incorrecto, siempre le dará una nota para mostrarle Una vez se enfrentó aquí, y después de haberlo pasado durante miles de horas y finalmente AC, calculará el libro mayor con usted, lo que indica que esta pregunta se ha enviado varias veces por error. Aunque el número de preguntas que pasa aumenta, el tiempo que pasa pasando cada pregunta (desde el principio hasta el momento en que pasa la pregunta) se registrará como un rastro de su lucha. . En particular, para la pregunta que pasa, cada envío incorrecto que hizo sobre esta pregunta se contará como una penalización de unidad de tiempo determinada. De esta manera, puede estar por delante de los demás en la cantidad de preguntas que hace, pero Entre los que hacen la misma cantidad de preguntas, puede estar en desventaja en el ranking debido a la alta penalización.
Por ejemplo, hay un total de ocho preguntas (A, B, C, D, E, F, G, H) en un examen. La pregunta de cada persona tiene una marca de cantidad debajo del número de pregunta correspondiente. Un número negativo indica que el estudiante está en la pregunta Ha habido envíos erróneos pero no hay CA hasta ahora. Un número positivo indica el tiempo que pasó el CA. Si el número positivo a es seguido por un paréntesis y hay un número positivo b, significa que el estudiante ha respondido esta pregunta. Tomó tiempo a, y al mismo tiempo, b lo envió incorrectamente. Para ver ejemplos, consulte las secciones de entrada y salida de muestra a continuación.
Los datos de entrada contienen varias líneas. La primera línea es el número total de preguntas n (1≤n≤12) y el tiempo de penalización de la unidad m (10≤m≤20). Cada línea de datos posterior describe la información de un estudiante, la primera es la del estudiante El nombre de usuario (una cadena de no más de 10 caracteres) va seguido del estado actual de todas las n preguntas. La descripción está en el formato de la marca de cantidad en la descripción del problema, consulte la tabla anterior.
Según el estado actual de las puntuaciones de estos estudiantes, se genera una clasificación en tiempo real. La clasificación en tiempo real obviamente se clasifica primero por el número de preguntas AC, más adelante, luego por tiempo, y menos al frente. Si sucede que las dos primeras son iguales, entonces se clasifica por nombre en orden lexicográfico, y la pequeña primero. . Cada estudiante ocupa una línea y muestra el nombre (10 caracteres de ancho), el número de preguntas (2 caracteres de ancho, alineado a la derecha) y el tiempo (4 caracteres de ancho, alineado a la derecha). Hay un espacio entre el nombre, el número de preguntas y el tiempo. Se garantiza que los datos se emitirán en el formato de salida requerido.

Ideas

Definir la estructura de una persona para almacenar el nombre, el número de preguntas acNum, el tiempo total de tiempo, de acuerdo con el formato de entrada, acNum es igual al número de entradas cuyo primer carácter no es '-' y '0', el tiempo es igual al valor del tiempo de la pregunta + número de errores * Cuando se penaliza la unidad, finalmente se ordena de acuerdo con la función de clasificación y salida de cmp.

Resumen

Después de esta pregunta, descubrí que mi comprensión de la cadena es muy corta

Código

#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct people 
{//保存学生的基本信息
	string name; 
	int acNum,time;
};
bool cmp(people&a,people&b){//为sort函数定义cmp
	if(a.acNum==b.acNum&&a.time==b.time)
		return  a.name<b.name;
	else
		if(a.acNum==b.acNum)
			return a.time<b.time;
		else
			return a.acNum>b.acNum;
}

string score;//输入的值
people p[10000];

int main()
{
	int n,m;
	cin>>n>>m;//n for 题数,m for 单位罚时 
	int num=0;
	while(cin>>p[num].name)
	{
		p[num].acNum=p[num].time=0;
		for(int i=0;i<n;i++)
		{
			cin>>score;
			if(score[0]=='0'||score[0]=='-')//未通过
			continue; 
			int time2=0,time1=0;
			p[num].acNum++;
			for(int i=0;i<score.length();i++){
				if(score[i]>='0'&&score[i]<='9')//记录过题的时间
					time2=time2*10+score[i]-48;
				if(score[i]=='('){
					for(int j=i+1;j<score.length()-1;j++){ 
						time1=time1*10+score[j]-48;//记录错误数
					}					
					break; 
				}
			}
			p[num].time+=time2+time1*m;//汇总总时间
		}
		num++; 
	 }

sort(p,p+num,cmp);
for(int i=0;i<num;i++)
{

	printf("%-10s %2d %4d\n",p[i].name.c_str(),p[i].acNum,p[i].time);
}
 return 0;
}

20 artículos originales publicados · elogiados 3 · visitas 460

Supongo que te gusta

Origin blog.csdn.net/qq_44893580/article/details/104672251
Recomendado
Clasificación