[NOIP 2005] que recibieron la mayoría de las becas

[NOIP 2005] que recibieron la mayoría de las becas

título

título Descripción

La práctica es una becas escolares después de cada semestre exámenes finales. Emitido un total de cinco becas, cada uno diferentes condiciones de acceso:

becas compañeros, por persona, de 8000, el resultado final es mayor que el promedio, 80 puntos (> 80), y ha publicado más de 11 o 11 trabajos en los estudiantes de semestre serán elegibles para
cincuenta y cuatro becas, por persona, 4.000 yuanes , poniendo fin a más alto que el promedio, 85 puntos (> 85), y el consejo de clase puntuaron más alto que los 80 puntos (> 80) estudiantes serán elegibles para;
Premio Trayectoria, por persona, $ 2000, que termina por encima de la puntuación media, 90 puntos (> 90) estudiantes serán elegibles para;
erudición occidental, por persona, $ 1000, que termina por encima de la puntuación media, 85 puntos (> 85) los estudiantes serán elegibles para las provincias occidentales;
clase premio, por persona, 850 yuanes, clase valoración obtuvieron calificaciones más altas de 80 puntos (> 80) de los líderes de los estudiantes serán elegibles para,
cuando cumplan las condiciones que deben ganando, ganando hay límite en el número de cada beca, cada estudiante también recibió un número de becas al mismo tiempo. Ejemplo puntuaciones de media punta Yao Lin 87 puntos, el consejo de clase puntuación de 82 puntos, mientras que él era un grupo de estudiante, él puede conseguir una beca y la clase de cincuenta y cuatro Premio a la Contribución al mismo tiempo, el dinero del premio total es de 4.850 yuanes.

Ahora los estudiantes se les da una serie de datos relevantes, calcular el dinero del premio más alto total, que obtienen los estudiantes (suponiendo que no siempre es becarios condicionales para satisfacer).

Formato de entrada

La primera fila es un número entero N (1≤N≤100), que representa el número total de estudiantes.

Las siguientes N líneas de datos de un estudiante, de izquierda a derecha es el nombre, final de promedio de calificaciones, los resultados del consejo de clase, si los líderes estudiantiles, ya sea en las provincias occidentales de los estudiantes y el número de trabajos publicados. El nombre es la longitud de letras mayúsculas y minúsculas que constan de no más de 020 cadena (sin espacios); al final del punto de grado de evaluación del rendimiento promedio y la clase es un número entero entre 0 y 100 (incluyendo 0 y 100); y si los líderes estudiantiles si el estudiante está en las provincias occidentales estaban representados por un carácter, y se expresa, N no representa, el número de trabajos publicados es un número entero de 0 a 10 (incluyendo 0 y 10). Cada dos adyacentes separadas por un espacio entre los artículos.

Formato de salida

Incluyendo 3 línea.

La línea 1 es posible obtener el nombre más bonos del estudiante.

La línea 2 es el número total de estudiantes fueron galardonados con este premio. Si hay un bono de más de dos o un máximo de dos estudiantes, entre ellos la salida del nombre del primer estudiante aparece en el archivo de entrada.

La línea 3 es el número total de estudiantes de las becas N.

entrada y salida de la muestra

Entrada # 1 de replicación
. 4
Yaolin 87 82 0 YN
ChenRuiyi 88 78 NY 1
Lixin 92 88 NN 0
ZhangQin YN 1 83 87
Salida # 1 de replicación
ChenRuiyi
9000
28700

análisis

Yo estaba acostumbrado directamente a almacenar una estructura de datos para hacerlo. . . .

código

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

int n;
struct data{
	string name;	//名字 
	int a;			//期末平均成绩
	int b;			//班级评议成绩
	char is1;		//	学生干部	
	char is2;		//西部省份学生
	int c;		// 论文数
	int sum;	//奖金 
	int k ;		//编号 
}d[105];


bool cmp(data x,data y){
	if(x.sum != y.sum){
		return x.sum > y.sum;
	}else{
		return x.k < y.k;
	}
}
int main(){
	
	cin>>n;
	int cnt =0;	//加起来的总金额 
	for(int i=0;i<n;i++){
		cin>>d[i].name>>d[i].a>>d[i].b>>d[i].is1>>d[i].is2>>d[i].c;
		d[i].k = i;
		
		if(d[i].a >80 && d[i].c >= 1){
			d[i].sum += 8000;
		}
		if(d[i].a >85 && d[i].b >80 ){
			d[i].sum += 4000;
		}
		if(d[i].a >90 ){
			d[i].sum += 2000;
		}
		if(d[i].a >85 && d[i].is2 == 'Y'){
			d[i].sum += 1000;
		}
		if(d[i].b >80 && d[i].is1 == 'Y'){
			d[i].sum += 850;
		}
		cnt += d[i].sum; 
	}
	
	sort(d,d+n,cmp);
	
	cout<<d[0].name<<endl;
	cout<<d[0].sum<<endl;
	cout<<cnt<<endl;
	return 0;
}
Publicado 76 artículos originales · ganado elogios 1 · vistas 3668

Supongo que te gusta

Origin blog.csdn.net/A793488316/article/details/104508766
Recomendado
Clasificación