[Solución de la pregunta] Detección de población con riesgo de CSP (parte lineal)

Directorio de artículos


Enlace de tema .

Ideas de algoritmos

Para todos, siempre que la posición caiga en la matriz una vez, incluso si pasa por el área de alto riesgo, debe pasar k veces seguidas antes de que se considere que permanece, por lo que es bueno registrar el máximo número de pases consecutivos de cada persona. Una variable max_tpara registrar el número máximo de veces, con la variable remainregistrar un número continuo de pasadas, cuando no hay tiempo transcurrido (corte), a remaincero, actualizar max_t, recuerde que esta persona debe actualizar todas las ubicaciones después de detectar completo max_tporque puede haber Ha estado atravesando zonas de alto riesgo de forma continua, sin romperse nunca.

#include<iostream>
#include<math.h>
using namespace std;

int n, k, t, xl, yd, xr, yu;
int pass = 0, stay = 0, remain = 0, max_t = 0; 
//pass : 经过人数,stay : 逗留人数, remain = 1 : 保持在里边的次数, max_t 连续最多几次在里边
int x, y;

int main()
{
	int i;
	scanf("%d%d%d%d%d%d%d", &n, &k, &t, &xl, &yd, &xr, &yu);
	while (n--)//每一个人
	{
		remain = 0;
		max_t = 0;
		for ( i = 1; i <= t; i++) //每一个时刻
		{
			scanf("%d%d", &x, &y);
			if (x >= xl && x <= xr && y >= yd && y <= yu)//在里边
			{
				remain++;
			}
			else
			{
				max_t = max(max_t, remain);
				remain = 0;
			}
		}
		max_t = max(max_t, remain); //有可能一次也没有中断过,即使此时 remain = 0,也没有错
		if (max_t > 0)
		{
			pass++;
		}
		if (max_t >= k)
		{
			stay++;
		}
	}
	printf("%d\n%d", pass, stay);
	return 0;
}


Análisis de resultados

La puntuación es de 100 puntos, el tiempo es de 31 ms, el espacio es de 2.941 MB y la complejidad del tiempo es O (n * t).

Supongo que te gusta

Origin blog.csdn.net/weixin_44092088/article/details/110246286
Recomendado
Clasificación