【PTA】 L2-027 Salón de la fama y cupón (25 puntos) 【Orden de estructura】

Para los estudiantes que cursan el curso "Estructura de datos" en el MOOC de la Universidad China (http://www.icourse163.org/), si desean obtener un certificado, la puntuación total de la evaluación debe alcanzar 60 puntos o más, y hay adicionales Beneficios: total Aquellos que obtienen una puntuación en el rango de [G, 100] pueden obtener un vale PAT de 50 yuanes, aquellos que están en el rango de [60, G) pueden obtener un vale PAT de 20 yuanes. Los centros de pruebas son universales y tienen una validez de un año. Al mismo tiempo, el maestro también incluirá a los mejores estudiantes de K en el puntaje general de la evaluación en el curso "Salón de la fama". Para esta pregunta, por favor escriba un programa para ayudar al maestro a enumerar a los estudiantes en el Salón de la Fama y contar el número total de vales PAT emitidos.

Formato de entrada:
ingrese 3 números enteros en la primera línea, que son N (un número entero positivo que no exceda los 10 000, que es el número total de estudiantes), G (un número entero en el intervalo (60,100), que es el comprobante descrito en el título) Línea divisoria de calificaciones), K (un número entero positivo que no exceda de 100 y que no exceda N, que es el rango más bajo para ingresar al Salón de la Fama). En las siguientes N líneas, cada línea da el número de cuenta del estudiante (una cadena de no más de 15 dígitos y sin espacios) y una puntuación total de la evaluación (un número entero en el intervalo [0, 100]), separados por espacios. El título garantiza que no hay cuentas duplicadas.

Formato de salida:
primero envíe el valor nominal total de los comprobantes PAT emitidos en una línea. Luego, muestre la clasificación, el número de cuenta y los resultados de los estudiantes que ingresaron al Salón de la Fama en orden no ascendente de los resultados de la evaluación general, separados por un espacio. Cabe señalar que los estudiantes con las mismas calificaciones disfrutan de una clasificación empatada. Cuando las clasificaciones están empatadas, se emitirán en orden alfabético ascendente de sus números de cuenta.

Muestra de entrada:

10 80 5
cy@zju.edu.cn 78
cy@pat-edu.com 87
1001@qq.com 65
uh-oh@163.com 96
test@126.com 39
anyone@qq.com 87
zoe@mit.edu 80
jack@ucla.edu 88
bob@cmu.edu 80
ken@163.com 70

Salida de muestra:

360
1 uh-oh@163.com 96
2 jack@ucla.edu 88
3 anyone@qq.com 87
3 cy@pat-edu.com 87
5 bob@cmu.edu 80
5 zoe@mit.edu 80

Código:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,g,k,sum=0,cnt=0,flag=0,id=1;
vector<int> ans;

struct node{
    
    
	string s;
	int score;
}peo[10050];

bool cmp(node a,node b){
    
     //分数不同从大到小,分数相同账号从小到大
	if(a.score!=b.score) return a.score>b.score; 
	else return a.s<b.s;
}

int main()
{
    
    	    
	cin>>n>>g>>k;
	for(int i=0;i<n;i++)
		cin>>peo[i].s>>peo[i].score;
	
	sort(peo,peo+n,cmp); 
	
	int flag=0;
	for(int i=0;i<n;i++)
	{
    
    
		if(peo[i].score>=g && peo[i].score<=100) sum+=50;
		else if(peo[i].score>=60 && peo[i].score<g) sum+=20;
		
		if(!flag) ans.push_back(i);
		if(i>=k && i+1<n && peo[i+1].score!=peo[i].score) flag=1; 
		//已经排了k名,并且下一个不与当前分数一样才标记(可能有多个第k名),标记后不再进入名人堂
	}
	
	cout<<sum<<endl;
	int l=0;
	for(int i=0;i<ans.size();i++)
	{
    
    
		if(i>0 && peo[i].score!=peo[i-1].score) //分数不同,id
		{
    
    
			id=id+l+1; //跳过连续相同的排名
			l=0; 
		} 
		else if(peo[i].score==peo[i-1].score) l++; //l记录连续相同分数的个数
		cout<<id<<" "<<peo[i].s<<" "<<peo[i].score<<endl;
	}
		
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45260385/article/details/109788839
Recomendado
Clasificación