empleos Week4-

El miedo a la DDL - Un


Significado de las preguntas:

ZJM hay n puestos de trabajo, cada trabajo tiene su propia DDL, si ZJM no se ha hecho el trabajo antes de que el DDL, entonces el maestro deducirá este trabajo todos los puntos habituales.
Así ZJM quieren saber cómo organizar el orden de las tareas a ceder un poco menos puntos como sea posible.
Por favor ayudarlo!

Entrada:

Entrada de prueba de la t. La primera línea de entrada es un único entero T, se encontró en el número de casos de prueba.
Cada caso de prueba para comenzar un número entero positivo N (1 <= N <= 1000), indica el número de puestos de trabajo.
A continuación, dos líneas. La primera línea contiene N enteros que representan el DDL, la siguiente fila que contiene N números enteros que representan puntos de la hebilla.

Salida:
Para cada caso de prueba, se debe reducir la salida de la puntuación total mínimo, cada línea de la prueba.


ideas:

Se trata de un algoritmo voraz ejercicios conocidos, indicadores codiciosos tienen que encontrar el problema. Cada vez completado ddl es 1, dando prioridad a la tarea de alta puntuación. Esta vez tiene que ser resuelto de mayor a menor puntuación, si la puntuación es la misma, y ​​luego considerar ddl, DDL la misma puntuación de menor a mayor. ddl puntuación puntuación y puede constituir una estructura. Buscar un indicadores codiciosos, es para el i-ésimo ddl, utilizar una matriz de bool si se ha utilizado el tiempo, de acuerdo con la t de desplazamiento de adelante hacia atrás, una vez que el tiempo de inactividad para encontrar el calendario.


resumen:

Esta pregunta sólo está empezando a considerar pedir la puntuación después de que el mismo marcador no tuvo en cuenta la necesidad de una ordenación adicional, aunque la muestra pasó, pero aún así el wa. Para los indicadores codiciosos se debe considerar grave para ciertas circunstancias necesitan para justificar la misma.


código:

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define _for(i,a,b) for(int i=a;i<b;i++)

struct ZJM
{
	int ddl;
	int score;
}z[1010];
bool vis[1010] = { false };
int cmp(const ZJM z1, const ZJM z2)
{
	if (z1.score == z2.score)
		return z1.ddl < z2.ddl;
	return z1.score > z2.score;

}

int main()
{
	int T,n;
	int a;
	cin >> T;
	_for(i, 0, T)
	{
		int count = 0;
		int a;
		cin >> n;
		_for(i, 0, n)
		{
			cin >> z[i].ddl;
		}
		_for(i, 0, n)
		{
			cin >> z[i].score;
		}
		sort(z, z + n,cmp);
		memset(vis, 0, sizeof(vis));
		_for(i, 0, n)
		{
			for (a = z[i].ddl; a >= 1; a--)
			{
				if (vis[a] == false)
				{
					vis[a] = true;
					break;
				}
			}
			if (a == 0) count += z[i].score;
		}
		cout << count << endl;
	}
	return 0;
	
}

B - cuatro columnas

Significado de las preguntas:

ZJM tiene cuatro columnas A, B, C, D, cada columna tiene el número de dígitos n. ZJM una serie tomada de cada número de la columna respectiva, le gustaría saber cómo muchos tipos de programas tales que el número de 4 y 0.
Cuando un número de columnas tiene la misma pluralidad de números, a tratarlos como un número diferente.

Entrada:
Primera línea: n (número representativo del número de columnas) (1≤n≤4000)
la n-ésima fila siguiente, el i-ésimo fila de cuatro números, cada número de columnas A, B, C, D de el dígito i-ésima (dígito 2 a la potencia de no más de 28)

salida:
número de salida de diferentes combinaciones.


ideas:

Las personas mayores pronunciadas por un inicio, el número de columnas de A + empadronador columnas B, entonces el número de columnas enumerar el número de columnas C + D. Entonces inversa de C + D se calcula cuántas veces apareció en el A y B. Pero la escritura de código o accidentalmente complejidad es O (N ^ 4)

_for(i, 0, n*n)
	{
		_for(j, 0, n * n)
		{
			if (sumab[i] == -sumcd[j])
				count++;
		}
	}

Obviamente, sin duda TE, esta vez teniendo en cuenta el método de dicotomía para reducir la complejidad, la primera es para enumerar el número de columnas para guardar todos los datos C + D gama sumcd de pequeño a grande, y luego enumerar la Sumab su vez, el inicio de inicialización y fin, el inicio es 0, final de (n-1) * (n-1), a continuación, utilizar dos horas, Sumab [i] se compara con sumcd [mID], para encontrar la suma es igual a la posición mínima de 0, luego otra vez circulación, porque sumcd se ordena, si el mismo número aparece más de una vez, se suman a la derecha ha sido tan completa Sumab recorrido para ponerse en línea con el número.

código:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define _for(i,a,b) for(int i=a;i<b;i++)
#define MAXN 4000
int a[MAXN], b[MAXN], c[MAXN], d[MAXN],sumab[MAXN*MAXN],sumcd[MAXN*MAXN];
int main()
{
	int count = 0;
	int n;
	cin >> n;
	_for(i, 0, n)
	{
		cin >> a[i] >> b[i] >> c[i] >> d[i];
	}
	int k = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			sumab[k] = a[i] + b[j];
			sumcd[k] = c[i] + d[j];
			k++;
		}
	}
	sort(sumcd, sumcd + k);
	for (int i = 0; i <k; i++)
	{
		int start =0, end =k-1;
		while (start < end)
		{
			int mid = (start + end) >> 1;
			if (sumab[i] + sumcd[mid] >= 0) 
			{
				end = mid;
			}
			else start = mid + 1;
		}
		while (sumab[i] + sumcd[start] == 0 && start < k)
		{
			count++;
			start++;
		}
	}
	cout << count << endl;
	return 0;

}

TT misterio regalo

Significado de las preguntas:

Resumen Se da array gato [i] un número N, y generar una nueva ans array [i] con la matriz. Se define como la nueva matriz para cualquier i, j e i = j, son ans [] = abs (cat [i] - gato [j]) !, 1 <= i <j <= N. Esta nueva matriz. Determinar la mediana, a continuación, la mediana es la especie (LEN + 1) / 2 que corresponde al número de posición, '/' es un redondeo.

Entrada:
múltiples conjuntos de entradas, cada entrada de una N, expresó el número N, a continuación, una longitud de la secuencia de entrada de la gato N, gato [i] <= 1E9 , 3 <= n <= 1e5.

salida:
nueva matriz de salida ans mediana.


ideas:

La matriz de gato en orden ascendente, la mediana de clasificación es más conocido con el ranking de cada dos minutos para dar la clasificación de la mediana (n * (n-1) / 2 + 1) / 2 pares, si el rango es de menos de la mediana, en nombre de este número es menor que la mediana, de lo contrario, es mayor que la mediana. A continuación, busque el valor P de dos goles, y luego buscar la clasificación. Ans elementos de la matriz son gato [j] -cat [i] (i <j), se convierte entonces es el deseo de cumplir con el gato [j] -cat [i] <= P para todas las tuplas de números. Por transposición, para dar gato [j] <= P + gato [i], y entonces enumerar el número que satisface i j, para obtener la clasificación. A continuación, la clasificación es el uso de búsqueda binaria, la última se encuentran [i], se obtiene un gato [j]> = P + posición CAT el valor máximo de j; cada rango j igual a la máxima acumulada y se resta i. Y se ha calculado el rango de comparación rango medio, hasta que encuentre la línea media.

resumen:

1. Esta pregunta se refiere a la comparación, debido al doble de la mitad, cuando la primera ronda de falta bipartita para mirar en línea no hay más práctico dicotomía función: Así que encontré este
(1), binary_search (BEG, extremo, val )
devuelve una variable bool, a la manera de búsqueda binaria para encontrar val entre [beg, final], vuelve verdadero descubrimiento, no puede encontrar el falso devoluciones.
(2), de límite distinto (BEG, extremo, val)
devuelve un iterador que señala secuencia no decreciente [primero, último) primero es mayor que o igual (> =) posición val.
(3), de límite superior (BEG, extremo, val)
devuelve un iterador que señala secuencia no decreciente [primero, último) es mayor que la posición val primero uno (>).
fuente original: https: //blog.csdn.net/xzymmd/article/details/83902281
Estos son el uso de un medio para encontrar la ubicación. Por el principio de estas funciones y quiero saber cómo el medio secundario.
2. Debido al límite de tiempo, comenzando con cin resultando en múltiples TE, en busca de un buen par de veces pensé que era la mitad de la razón, cambia un poco, o TE, luego trató pasó el scanf.
Aquí Insertar imagen Descripción
Más tarde, pedirle al amigo aprendido ios :: sync_with_stdio (falsa) puede mejorar la eficiencia de cin.
Esta pregunta es corta, por lo que me he beneficiado mucho, aprendí mucho conocimiento práctico.

código:

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

int main()
{
	int n;
	int start, end, mid, median, rank,mid1,ans,ans1;
	while (cin >> n)
	{
		int cat[100002];
		for (int i = 0; i < n; i++)
		{
			scanf("%d",&cat[i]);
		}
		sort(cat, cat + n);
		ans=-1;
		start = 0;  //绝对值最小只为0
		end = cat[n - 1] - cat[0]; //最大的数
		median = (1 + n * (n - 1) / 2) / 2; //中位数所在位置
		while (start <= end)
		{
			mid = (start + end) / 2;
			rank = 0;  //初始化位置
			for (int i = 0; i < n; i++)
			{
				int temp=cat[i] + mid; 
				int l = 0, r = n-1;
				ans1=-1;
				while (l <= r)
				{
					mid1 = (l + r)/2;
					if (cat[mid1] <= temp)
					{
						ans1=mid1;
						l=mid1+1;
					}

					else r = mid1 - 1;
				}
				if(ans1!=-1)
					rank+=ans1-i;
			}
			if(rank<median)
			{
				start=mid+1;
			}
			else
			{
				ans=mid;
				end=mid-1;
			}
			
			
		}
		cout << ans << endl;

	}

	return 0;
}

Publicado siete artículos originales · ganado elogios 0 · Vistas 125

Supongo que te gusta

Origin blog.csdn.net/weixin_44465341/article/details/104950977
Recomendado
Clasificación