Classement des scores de l'expérience 2 B

Le titre

Le système d'évaluation en temps réel utilisé pour la programmation des travaux de réflexion et des expériences a les caractéristiques de l'obtention de classements dans le temps, comment sa fonction est-elle réalisée?
Après avoir minutieusement terminé le programme que nous ne pouvions pas supporter de regarder directement et de le soumettre, le système d'évaluation retournera AC ou diverses autres erreurs. Quelle que soit la mauvaise méthode, il vous donnera toujours une note pour vous montrer Il a déjà été dénoyauté ici, et après l'avoir traversé pendant des milliers d'heures et finalement l'a CA, il calculera le grand livre avec vous, indiquant que cette question a été soumise plusieurs fois par erreur. Bien que le nombre de questions que vous passez augmente, le temps que vous passez à passer chaque question (du début au moment où vous passez la question) sera enregistré comme une trace de votre lutte. . En particulier, pour la question que vous passez, chaque mauvaise soumission que vous avez faite sur cette question sera comptée comme une certaine pénalité de temps unitaire. De cette façon, vous pouvez être en avance sur les autres dans le nombre de questions que vous posez, mais Parmi ceux qui posent le même nombre de questions, vous pouvez être désavantagé dans le classement en raison de la pénalité élevée.
Par exemple, il y a un total de huit questions (A, B, C, D, E, F, G, H) dans un examen. La question de chaque personne a une note de quantité sous le numéro de question correspondant. Un nombre négatif indique que l'élève est sur la question Il y a eu des soumissions erronées mais il n'y a pas de CA jusqu'à présent. Un nombre positif indique le temps passé par le CA. Si le nombre positif a est suivi d'une paire de parenthèses et qu'il y a un nombre positif b, cela signifie que l'étudiant a répondu à cette question. Cela a pris du temps a, et en même temps, b l'a soumis incorrectement. Pour des exemples, voir les exemples de sections d'entrée et de sortie ci-dessous.
Les données d'entrée contiennent plusieurs lignes. La première ligne est le nombre total de questions n (1≤n≤12) et le temps de pénalité unitaire m (10≤m≤20). Chaque ligne de données suivante décrit les informations d'un élève, la première est celle de l'élève. Le nom d'utilisateur (une chaîne de 10 caractères maximum) est suivi de l'état actuel de toutes les n questions. La description est au format du repère de quantité dans la description du problème, voir le tableau ci-dessus.
Selon l'état actuel des notes de ces étudiants, un classement en temps réel est produit. Le classement en temps réel est évidemment classé en premier par le nombre de questions AC, plus en avant, puis en temps, et moins en avant. S'il arrive que les deux premières soient égales, alors il est trié par nom dans l'ordre lexicographique, et le plus petit en premier. . Chaque élève occupe une ligne et affiche le nom (10 caractères de large), le nombre de questions (2 caractères de large, aligné à droite) et le temps (4 caractères de large, aligné à droite). Il y a un espace entre le nom, le nombre de questions et le temps. La sortie des données est garantie dans le format de sortie requis.

Des idées

Définir la structure d'une personne pour stocker le nom, le nombre de questions acNum, le temps total, selon le format d'entrée, acNum est égal au nombre d'entrées dont le premier caractère n'est pas '-' et '0', le temps est égal à la valeur de l'heure de la question + nombre d'erreurs * Lorsque l'unité est pénalisée, elle est finalement triée selon le tri et la sortie de la fonction cmp.

Résumé

Après cette question, j'ai trouvé que ma compréhension de la chaîne est très courte

Code

#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;
}

Publié 20 articles originaux · loué 3 · visites 460

Je suppose que tu aimes

Origine blog.csdn.net/qq_44893580/article/details/104672251
conseillé
Classement