PAT B1080 MOOC en el marcador final (25 puntos)

enlaces a los temas : https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088

Título Descripción
de plan de estudios de aprendizaje de los estudiantes "estructura de datos" en chino Universidad MOOC (http://www.icourse163.org/), que desea obtener un certificado, primero debe obtener un mínimo de 200 puntos de los puntos de trabajo de programación en línea, En general a continuación, obtenido de menos de 60 (de 100). La puntuación global se calcula como G = (G intermedia × 40% + G definitiva × 60%), si G intermedia> G final; de otro modo general G es G final. Aquí G intermedia y final G eran estudiantes de intermedia y las calificaciones finales.

El problema ahora es que cada prueba produjo una tarjeta de informe independiente. Esta pregunta se le pedirá que escriba un programa, elaborado como una tarjeta de informe diferente.

Introduzca la
entrada dado tres enteros en la primera línea, es decir, P (el número de puestos de trabajo para hacer los estudiantes de programación en línea), (el número de estudiantes que participaron en el mediano plazo) M, N (para participar en el examen final del número de estudiantes). Cada número de no más de 10.000.

A continuación hay tres entradas. A primera programación línea de puntuación de P G P; segundo bloque incluye las puntuaciones M intermedias G intermedia; tercer bloque contiene N examen final G final. Cada actuación por línea, en el formato: Los resultados de los estudiantes de la escuela. En el que el número de estudiante no más de 20 caracteres de letras y números en inglés es, fracción entero no negativo (un máximo de 900 puntos sobre la programación, al final del período, y la más alta puntuación de 100 puntos).

Salida de
imprimir la lista de los estudiantes que obtengan un certificado de competencia. Cada estudiante por línea, en el formato:

número de estudiante G P G a medio plazo G G definitiva

Si algunos de los resultados (por ejemplo, una persona no participaron en el examen de mitad de período), la posición correspondiente "-1" no existe. La producción total de acuerdo con el orden de las puntuaciones descendente (redondeado al número entero más cercano). Si hay empate, el número de estudiantes de prensa se incrementa. Tema asegurar que no haya duplicación número de estudiante, y hay al menos un estudiantes calificados.

样例输入
6 6 7
01 234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
faltante 400
ydhfu77 99
wehu8 55
ydjh2 98
dx86w 88
a1903 86
01 234 39
ydhfu77 88
a1903 66
01 234 58
wehu8 84
ydjh2 82
falta 99
dx86w 81

Salida de muestra
Missing 400 -1 99 99
ydjh2 98 82 88 200 es
dx86w 220 88 81 84
wehu8 300 55 84 84

código

#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;


struct student{
	string id;
	int G_p, G_m, G_f, G;
	student() {								//用构造函数赋初值
		G_p = -1; G_m = -1; G_f = -1;
	}
}stu[100010], s[100010];

bool cmp(student a, student b) {
	if(a.G != b.G)
		return a.G > b.G;
	else
		return a.id < b.id;
}

int main() {
	int p, m, n, temp, count = 0, num = 1;
	string name;
	map<string, int> mp;					//用mp来对学号进行编号
	cin >> p >> m >> n;
	for(int i = 0; i < p + n + m; i++) {
		cin >> name >> temp;
		if(mp[name] == 0) {					//若此学号第一次输入		
			mp[name] = num;
			stu[num].id = name;
			num++;
		}
		if(i < p)
			stu[mp[name]].G_p = temp;
		else if(i < p + m)
			stu[mp[name]].G_m = temp;
		else
			stu[mp[name]].G_f = temp;
	}
	for(int i = 1; i <= num; i++) {
		if(stu[i].G_m > stu[i].G_f)
			stu[i].G = (int)((stu[i].G_m * 1.0 * 0.4 +  stu[i].G_f * 1.0 * 0.6) + 0.5);
		else
			stu[i].G = stu[i].G_f;
		if(stu[i].G_p >= 200 && stu[i].G >= 60)			//合格
			s[count++] = stu[i];
	}
	sort(s, s + count, cmp);
	for(int i = 0; i < count; i++)
		cout << s[i].id << ' ' << s[i].G_p << ' ' << s[i].G_m << ' ' << s[i].G_f << ' ' << s[i].G << endl;
	return 0;
}
Publicados 327 artículos originales · ganado elogios 12 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/Rhao999/article/details/105207702
Recomendado
Clasificación