PAT B 1045 /// entender enfoque rápido especie inteligente después de que el drenaje rápido /// considerar el caso extremo

El famoso algoritmo de ordenación rápida en una división clásica del proceso: Por lo general, utilizan algún método toma un elemento como un componente principal, a través del intercambio, el yuan menos que el principal elemento a su izquierda, en el gran dólar de los elementos principales es lo correcto. La disposición de los enteros positivos N diferentes el uno del otro después de una división dada, PCA puedo preguntar cuántos elementos pueden dividirse en pre-seleccionado?
Por ejemplo dado norte = 5 N = 5 , la disposición es 1,3,2,4,5. entonces:

  • 1 izquierda no hay elementos, los elementos de la derecha de lo que es grande, así que podría ser PCA;
  • Aunque el elemento izquierdo 3 de lo que es pequeña, pero su derecho 2 es menor de lo que, por lo que no puede ser un componente principal;
  • Aunque los elementos correctos 2 de lo que es grande, pero dejó una gran 3 de lo que es, por lo que no puede ser un componente principal;
    por razones similares, 4 y 5 son probable que sea el yuan principal.
    De acuerdo con ello, tres elementos pueden ser Análisis de Componentes Principales.

Formato de entrada:
Introduzca un número entero positivo dado N (1 ≦ 10 en la línea 5 ), la segunda fila está separada por un espacio N diferentes números enteros positivos, el número de no más de 10 9. .
Formato de salida:
en la primera línea es el número de posibles elemento de salida de los principales elementos, y la salida en orden ascendente de estos elementos en la segunda fila en el sistema, separadas por un espacio, la línea no puede tener incluido el espacio extra.

de entrada de la muestra:
. 5
1 2. 4. 3. 5.
de muestra de salida:
. 3
1. 4. 5.

Pensando: Esta pregunta que no puedo empezar en sí, entonces referencia a código de otras personas sólo para encontrar su propia comprensión de la fila rápida lo suficientemente profundo debido. Buscando un PCA drenaje rápido, cambio de emperador Yuan de la izquierda que el componente principal es pequeño, la derecha que el principal Yuan. Y ahora el tema nos obliga a buscar un PCA en una cadena de números, y satisfacer las condiciones anteriores. Nos puede entenderse como: Título nos ha ayudado a completar el proceso de encontrar la PCA y el intercambio. Es decir, de acuerdo con el procedimiento de descarga rápida, seguido en relación con el número de lados de la derecha y la izquierda elemento principal llamada de forma recursiva para cada descarga rápida. Esto implica que somos un mensaje muy importante: el primer componente principal ha sido homing, se ha colocado en una disposición ordenada, debe estar en la posición.
Así primera aproximación vec1 digitales incluidos en la matriz, a continuación, una copia gama vec2, a continuación, la clasificación por vec2 comparación vec1, indica que los principales componentes son iguales (x)
, entonces el primer código de escritura de la siguiente manera:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	bool flag = false;
	cin >> n;
	vector<int> vec1, vec2, vec3;
	for (int i = 0; i < n; i++)
	{
		int num;
		cin >> num;
		vec1.push_back(num);
		vec2.push_back(num);
	}
	sort(vec2.begin(), vec2.end());
	for (int i = 0; i < vec1.size(); i++)
		if (vec1[i] == vec2[i])
			vec3.push_back(vec1[i]);
	sort(vec3.begin(), vec3.end());
	cout << vec3.size() << endl;
	for (int i = 0; i < vec3.size(); i++)
	{
		if (i != 0) cout << ' ';
		cout << vec3[i];
	}
	return 0;
}

Sin embargo, este código sólo puede ser cuatro muestras, a continuación, se encontró que dijo antes, "son iguales, entonces el componente principal es" un solo lado, no es un ejemplo extremo, tales como: 54321, copiar y matriz ordenada 3 se encuentra para ser iguales, pero 3 que no dejó satisfecho de lo pequeño, de lo que era la situación correcta. Así que esté unido a un bajo condición, "igual y el valor máximo de la izquierda de lo que era pequeña, indica que el ACC"
Cambiar el código es el siguiente:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	bool flag = false;
	cin >> n;
	vector<int> vec1, vec2, vec3;
	for (int i = 0; i < n; i++)
	{
		int num;
		cin >> num;
		vec1.push_back(num);
		vec2.push_back(num);
	}
	int MAX = 0;
	sort(vec2.begin(), vec2.end());
	for (int i = 0; i < vec1.size(); i++)
	{
		if (vec1[i] == vec2[i] && vec1[i] > MAX) //更改后的条件
			vec3.push_back(vec1[i]);
		if (vec1[i] > MAX) //MAX用来记录左边的最大值
			MAX = vec1[i];
	}
	sort(vec3.begin(), vec3.end());
	cout << vec3.size() << endl;
	for (int i = 0; i < vec3.size(); i++)
	{
		if (i != 0) cout << ' ';
		cout << vec3[i];
	}
	cout << endl;
	return 0;
}

Finalmente, nota que cout << endl;envoltura de salida, puede indicar cuando el elemento principal no está presente, a continuación, cambiar a dos líneas de salida 0

Publicados 101 artículos originales · ganado elogios 1 · vistas 1956

Supongo que te gusta

Origin blog.csdn.net/weixin_43318827/article/details/105314928
Recomendado
Clasificación