PAT (Nivel avanzado) Práctica 1029 Mediana (25 分)

tema

Dada una secuencia creciente S de N números enteros, la mediana es el número en la posición media. Por ejemplo, la mediana de S1 = {11, 12, 13, 14} es 12 y la mediana de S2 = {9, 10, 15, 16, 17} es 15. La mediana de dos secuencias se define como la mediana de la secuencia no decreciente que contiene todos los elementos de ambas secuencias. Por ejemplo, la mediana de S1 y S2 es 13.

Dadas dos secuencias crecientes de números enteros, se le pide que encuentre su mediana.

Especificación de entrada:

Cada archivo de entrada contiene un caso de prueba. Cada caso ocupa 2 líneas, cada uno da la información de una secuencia. Para cada secuencia, el primer entero positivo N (≤ 2 × 1 0 5 2 \ times10 ^ {5}2×1 05 ) es el tamaño de esa secuencia. Luego siguen N números enteros, separados por un espacio. Se garantiza que todos los números enteros están en el rango de int largo.

Especificación de salida:

Para cada caso de prueba, debe generar la mediana de las dos secuencias dadas en una línea.

Entrada de muestra:

4 11 12 13 14
5 9 10 15 16 17

Salida de muestra:

13

Código

Lo más temido de este problema es que es complicado y se puede solucionar con sort.

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(long int a,long int b)
{
    
    
	return a <= b;
}
int main()
{
    
    
	long int n1,n2;
	cin >> n1;
	long int l[400000];
	for(long int i = 0;i < n1;i++)
		cin >> l[i];
	cin >> n2;
	for(long int i = 0;i < n2;i++)
		cin >> l[n1+i];
	sort(l,l+n1+n2,cmp);
	long int m = (n1+n2)/2;
	if((n1+n2)%2 == 0)
		m--;
	cout << l[m];
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43820008/article/details/114003201
Recomendado
Clasificación