La vigésima certificación CSP-202009-evaluación de la población de riesgo de Java (100 puntos)

Detección de población en riesgo

Límite de tiempo: 1.0 segundo
Límite de espacio: 512 MiB

Antecedentes del tema
    Tras el brote de una epidemia en un lugar determinado, basado en el principio de "todas las inspecciones deben hacerse", queremos notificar a todos los residentes que hayan pasado recientemente por la zona de alto riesgo para que participen en las pruebas de ácido nucleico.

Descripción del Título
    Para conocer a los residentes que pasan por áreas de alto riesgo, analizar los registros de ubicación es un método simple y efectivo.

    Específicamente, el registro de ubicación de un residente contiene t coordenadas del plano (x 1 , y 1 ), (x 2 , y 2 ), ..., (x t , y t ), donde (x i, y i ) representa La ubicación del residente en este momento. El área de alto riesgo se puede abstraer como un área rectangular (incluido el límite), las coordenadas de la esquina inferior izquierda y la esquina superior derecha son (x l , y d ) y (x r , y u ) respectivamente, satisfaciendo x l <x r y y d <y u .

    Considere el registro de ubicación de un residente determinado. Si una de las coordenadas está dentro del rectángulo (incluido el límite), significa que el residente ha atravesado el área de alto riesgo; además, si k o más coordenadas consecutivas están dentro del rectángulo (incluido el límite), Se cree que el residente se había quedado en una zona de alto riesgo. Cabe señalar que al determinar el paso y la permanencia, solo nos interesan las coordenadas t en el registro de ubicación, sin considerar dónde se encuentra el residente entre el tiempo i y i + 1.

    Dado el rango del área de alto riesgo y los registros de ubicación de n residentes en los últimos momentos, intente contar el número de personas que han pasado por el área de alto riesgo y el número de personas que se han quedado en el área de alto riesgo.

Formato de entrada
    Leer datos de entrada estándar.

    Ingrese un total de n + 1 líneas.

    La primera línea contiene siete números enteros n, k, t, x l , y d , x r y y u separados por espacios , con los significados descritos anteriormente.

    Las siguientes n líneas, cada línea contiene 2t enteros separados por espacios, indicando en orden los registros de ubicación de un residente en los últimos t momentos (x 1 , y 1 ), (x 2 , y 2 ), ..., (x t , y t ).

Formato de salida
    Salida a salida estándar.

    La salida consta de dos líneas, cada una con un número entero, que indica el número de personas que han pasado por el área de alto riesgo y el número de personas que se han quedado en el área de alto riesgo.

Entrada de muestra 1

5 2 6 20 40 100 80
100 80 100 80 100 80 100 80 100 80 100 80
60 50 60 46 60 42 60 38 60 34 60 30
10 60 14 62 18 66 22 74 26 86 30 100
90 31 94 35 98 39 102 43 106 47 110 51
0 20 4 20 8 20 12 20 16 20 20 20

Salida de muestra 1

3
2

Ejemplo 1 explicación
    Como muestra la marca roja en la figura siguiente, los primeros tres registros de ubicación han pasado por el área de alto riesgo; pero el tercer registro de ubicación (la curva superior izquierda en la figura) se ubica en el área de alto riesgo en un solo momento y no cumple con las condiciones de estadía.

img
Entrada de muestra 2

1 3 8 0 0 10 10
-1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 0 0

Salida de muestra 2

1
0

Ejemplo 2 explicación
    El registro de ubicación ha pasado por la zona de alto riesgo, pero en ella solo se ubican dos momentos consecutivos como máximo y no se cumplen las condiciones de estancia.

Subtareas
    Todos los puntos de prueba satisfacen 1≤n≤20 , 1≤k≤t≤10 3 , y todas las coordenadas son números enteros y el valor absoluto no excede 10 6 .

Código de 100 puntos:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Reader {
    
    
	static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokenizer = new StringTokenizer("");

	static String next() throws IOException {
    
    
		while (!tokenizer.hasMoreTokens()) {
    
    
			tokenizer = new StringTokenizer(reader.readLine());
		}
		return tokenizer.nextToken();
	}

	static String nextLine() throws IOException {
    
    
		return reader.readLine();
	}

	static int nextInt() throws IOException {
    
    
		return Integer.parseInt(next());
	}

	static long nextLong() throws IOException {
    
    
		return Long.parseLong(next());
	}

	static double nextDouble() throws IOException {
    
    
		return Double.parseDouble(next());
	}
}

class Main {
    
    

	public static void main(String[] args) {
    
    
		try {
    
    
			int n = Reader.nextInt(), k = Reader.nextInt(), t = Reader.nextInt(), xl = Reader.nextInt(),
					yd = Reader.nextInt(), xr = Reader.nextInt(), yu = Reader.nextInt(), x, y, passNum = 0, stayNum = 0,
					count;
			boolean pass = false;
			boolean stay = false;
			boolean flag = false;
			for (int i = 0; i < n; i++) {
    
    
				count = 0;
				stay = false;
				pass = false;
				flag = false;
				for (int j = 0; j < t; j++) {
    
    
					x = Reader.nextInt();
					y = Reader.nextInt();
					if (xl <= x && x <= xr && yd <= y && y <= yu) {
    
    
						count++;
						pass = true;
						flag = true;
					}
					if (!flag) {
    
    
						count = 0;
					}
					flag = false;
					if (count == k) {
    
    
						stay = true;
					}
				}
				if (stay) {
    
    
					stayNum++;
				}
				if (pass) {
    
    
					passNum++;
				}
			}
			System.out.println(passNum);
			System.out.println(stayNum);
		} catch (IOException e) {
    
    
			e.printStackTrace();
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/H_X_P_/article/details/108573897
Recomendado
Clasificación