CCF-CSP 201503-2 clasificación numérica

Descripción del problema
  Dados n enteros, cuente el número de ocurrencias de cada entero y el resultado en el orden del número de ocurrencias.
Formato de entrada
  La primera línea de entrada contiene un número entero n, que representa el número de números dados.
  La segunda línea contiene n enteros, y los enteros adyacentes están separados por un espacio para indicar el entero dado.
El formato de
  salida genera múltiples líneas, cada línea contiene dos enteros, que representan respectivamente un número entero dado y el número de veces que aparece. Salida en orden descendente de ocurrencia. Si los dos enteros aparecen tantas veces como sea posible, primero se genera el valor más pequeño y luego se emite el valor más grande.
Entrada de muestra
12
5 2 3 3 1 3 4 2 5 2 3 5
Salida de muestra
3 4
2 3
5 3
1 1
4 1
Escala de casos de uso de evaluación y convención
  1 ≤ n ≤ 1000, los números dados no son más de 1000 Entero no negativo.

Resumen de la experiencia:
defina un mapa_desordenado, utilizado para almacenar cada número y el número de ocurrencias de este número.
Defina una estructura para almacenar cada número y el número de ocurrencias de este número.
Coloque los datos en unordered_map en la estructura y luego en el vector,
luego ordene y genere.

Código C ++:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int num;
	int cnt;
	node(int num,int cnt):num(num),cnt(cnt){}
};
bool cmp(node a,node b){
	if(a.cnt == b.cnt) return a.num<b.num;
	return a.cnt>b.cnt;
}
int main() {
	int n;
	unordered_map<int,int> um;
	vector<node> v;
	scanf("%d",&n);
	while(n--){
		int num;
		scanf("%d",&num);
		um[num]++;
	}
	for(auto m:um){
		v.push_back(node(m.first,m.second));
	}
	sort(v.begin(),v.end(),cmp);
	for(auto i:v){
		printf("%d %d\n",i.num,i.cnt);
	}
	return 0;
}
Publicados 111 artículos originales · ganado elogios 2 · Vistas 3533

Supongo que te gusta

Origin blog.csdn.net/m0_38088647/article/details/100633696
Recomendado
Clasificación