Blue Bridge Cup java 2018

El video de la Copa Java Blue Bridge explica el código.

1. Tiempo de vuelo

[Antecedentes del problema]
Xiao H fue a los Estados Unidos para participar en la competencia internacional de la Blue Bridge Cup. La novia de Xiao H descubrió que Xiao H partió a las 10 a.m. y llegó a los Estados Unidos a las 12 a.m., por lo que se lamentó de que "el avión está volando muy rápido ahora, y usted puede llegar a los Estados Unidos en dos horas".

Xiao h estaba aterrorizado por el vuelo supersónico. Después de una cuidadosa observación, se descubrió que los tiempos de despegue y aterrizaje de la aeronave son todos hora local. Debido a la diferencia horaria de 12 horas entre Beijing y el este de los Estados Unidos, el avión necesita un total de 14 horas de tiempo de vuelo.

Poco después, la novia de H fue a intercambiar en el Medio Oriente. Xiao H no sabía la diferencia horaria entre Medio Oriente y Beijing. Pero Xiao H obtuvo el tiempo de despegue y aterrizaje del vuelo de ida y vuelta de su novia. Xiao H quiere saber cuál es el tiempo de vuelo de la novia.

[Descripción del problema]
Para un vuelo que puede cruzar una zona horaria, se proporciona un tiempo de ida y vuelta determinado. Suponiendo que el tiempo de vuelo de ida y vuelta del avión es el mismo, encuentre el tiempo de vuelo del avión.

[Formato de entrada]
Leer datos de la entrada estándar.

Una entrada contiene múltiples conjuntos de datos.

Ingrese la primera línea como un entero positivo T, que indica el número de grupos de datos de entrada.

Cada conjunto de datos contiene dos filas, la primera línea es el tiempo de despegue y aterrizaje del viaje de ida, y la segunda línea es el tiempo de despegue y aterrizaje del viaje de regreso.

El formato del tiempo de despegue y aterrizaje es el siguiente

h1: m1: s1 h2: m2: s2
o
h1: m1: s1 h3: m3: s3 (+1)
o
h1: m1: s1 h4: m4: s4 (+2)
significa que el vuelo es a la hora local h1 m1 Despega en s1 segundos,

El primer formato significa aterrizar en h2 en punto m2 min s2 seg el día de la hora local

El segundo formato significa aterrizar en h3: m3: s3 segundos al día siguiente a la hora local.

El tercer formato significa aterrizar en el tercer día de la hora local a h4m4m4s4 segundos.

Para todo el tiempo dado en forma de hⓂ️s en este tema, garantice (0 <= h <= 23, 0 <= m, s <= 59).

[Formato de salida]
Salida a salida estándar.

Para cada conjunto de datos, se emite una línea de tiempo hh: mm: ss, que indica que el tiempo de vuelo es hh horas mm minutos ss segundos.

Tenga en cuenta que cuando el tiempo es un solo dígito, los ceros iniciales deben rellenarse. Por ejemplo, tres horas, cuatro minutos y cinco segundos deben escribirse como 03:04:05.

[Entrada de muestra]
3
17:48:19
21:57:24 11:05:18
15:14:23 17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24 22:19:04 16:41:09
(+1)

[Salida de muestra]
04:09:05
12:10:39
14:22:05

public class HangBan {
	static Scanner sc=new Scanner(System.in);
	public static void main(String[] args) throws Exception {
		
		int T=sc.nextInt();
		sc.nextLine();
		for(int i=0;i<T;i++) {
			long time1=getTime();
			long time2=getTime();
			long t=(time1+time2)/2;
			System.out.printf("%02d:%02d:%02d\n",t/3600,t/60%60,t%60);
		}
	}

	private static long getTime() throws Exception {
		String line=sc.nextLine();
		String[] split=line.split(" ");
		SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");
		Date t1=format.parse(split[0]);
		Date t2=format.parse(split[1]);
		int d=0;
		if(split.length==3) {
			d=Integer.parseInt(split[2].substring(2,3));
			
		}
		return d*24*3600+t2.getTime()/1000-t1.getTime()/1000;
	}
}

2. Ataque de tres cuerpos

【Descripción】 El
hombre de tres cuerpos atacará la tierra. Para resistir el ataque, los Earthmen enviaron naves de guerra A × B × C para formar un cubo en la fila A, fila B y fila C en el espacio. Entre ellos, el valor de vida del acorazado en la fila i, fila j y columna k (denotado como acorazado (i, j, k)) es d (i, j, k).

El hombre de tres cuerpos lanzará rondas de "ataques de cubos" en la tierra, cada ataque causará el mismo daño a todos los acorazados en un cubo pequeño. Específicamente, el ataque t redondo se describe mediante 7 parámetros lat, rat, lbt, rbt, lct, rct, ht;
todos satisfacen i ∈ [lat, rat], j ∈ [lbt, rbt], k ∈ [lct, rct ] El acorazado (i, j, k) será dañado por ht. Si el daño total recibido por un buque de guerra excede su poder de defensa, el buque de guerra explotará.

El Comandante de la Tierra espera que puedas decirle después de qué ronda de ataque explotó la primera nave explosiva.

[Formato de entrada]
Leer datos de la entrada estándar.
La primera línea contiene 4 enteros positivos A, B, C, m; la
segunda línea contiene enteros A × B × C, donde el ((i - 1) × B + (j - 1)) × C + (k - 1) el número +1 es d (i, j, k); las
líneas 3 a m + 2 y la línea (t - 2) contiene 7 enteros positivos lat, rat, lbt, rbt, lct, rct ht.

[Formato de salida]
Salida a salida estándar.
Es la salida después de qué ronda de ataque explotó el primer buque de guerra. Asegúrese de que tal acorazado debe existir.

[Entrada de muestra]
2 2 2 3
1 1 1 1 1 1 1 1 1
1 2 1 2 1 1 1
1 1 1 2 1 2 1
1 1 1 1 1 1 2

[Salida de muestra]
2

[Explicación de muestra]
Después de la segunda ronda de ataque, el acorazado (1,1,1) recibió un total de 2 daños, lo que superó su defensa y causó una explosión.

[Convención de datos]
Para 10% de datos, B = C = 1;
para 20% de datos, C = 1;
para 40% de datos, A × B × C, m ≤ 10,000;
para 70% de datos, A, B, C ≤ 200;
para todos los datos, A × B × C ≤ 10 ^ 6, m ≤ 10 ^ 6, 0 ≤ d (i, j, k), ht ≤ 10 ^ 9.

Convención de recursos:
consumo máximo de memoria (incluida la máquina virtual) <256
M de consumo de CPU <3000 ms

Creo que esta pregunta es tan difícil que no es algo que mi cerebro pueda resolver.
Primero, el bucle for de tres capas se rompe y se rompe la fuerza bruta, pero solo el 40% de los datos pueden pasar

搜到的暴力破解法
public class Santi {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int a, b, c, m;
		a = input.nextInt();
		b = input.nextInt();
		c = input.nextInt();
		m = input.nextInt();
		int[][][] martix = new int[a + 1][b + 1][c + 1];

		for (int i = 1; i <= a; ++i)
			for (int j = 1; j <= b; ++j)
				for (int k = 1; k <= c; ++k)
					martix[i][j][k] = input.nextInt();

		int lat, rat, lbt, rbt, lct, rct, ht;
		int flag = 0;
		for (int p = 1; p <= m; ++p) {
			lat = input.nextInt();
			rat = input.nextInt();
			lbt = input.nextInt();
			rbt = input.nextInt();
			lct = input.nextInt();
			rct = input.nextInt();
			ht = input.nextInt();
			for (int i = lat; i <= rat; ++i)
				for (int j = lbt; j <= rbt; ++j)
					for (int k = lct; k <= rct; ++k) {
						martix[i][j][k] -= ht;
						if (martix[i][j][k] < 0) {
							flag = p;
							break;
						}
					}

			if (flag != 0)
				break;
		}
		System.out.println(flag);
	}
}

Optimización: la primera dicotomía es seguir lo malo.
Para comprender la
audición diferencial bidimensional durante más de media hora, es demasiado difícil renunciar.

44 artículos originales publicados · Me gusta2 · Visitas 540

Supongo que te gusta

Origin blog.csdn.net/qq_43699776/article/details/105155381
Recomendado
Clasificación