Ejercicios básicos de Blue Bridge Cup para predecir el camino de la Blue Bridge Cup

Examen preguntas predicción práctica básica

Se dice que hay todo tipo de conejos y tortugas en este mundo, pero el estudio encontró que todos los conejos y tortugas tienen una característica común como la raza. Entonces, las razas de tortugas y conejos ocurren constantemente en todos los rincones del mundo. Xiaohua está muy interesado en esto, por lo que decide estudiar la raza de diferentes conejos y tortugas. Descubrió que aunque los conejos corren más rápido que las tortugas, tienen un problema conocido: orgulloso y perezoso, por lo que en el juego con las tortugas, una vez que el conejo se encuentra por delante de t metros o más después de un segundo, se detendrán. Descansa por s segundos. Para diferentes conejos, los valores de t y s son diferentes, pero todas las tortugas son iguales, no se detendrán hasta el final.
  Sin embargo, algunos juegos son bastante largos, y lleva mucho tiempo ver todo el proceso. Xiaohua descubrió que mientras los datos de conejos y tortugas se registren después del inicio de cada juego, la velocidad del conejo es v1 (lo que significa que el conejo puede correr v1 metros por segundo). La velocidad v2, y el valor t, s correspondiente del conejo, y la longitud de la pista l-pueden predecir el resultado del juego. Pero Xiaohua era flojo y no quería adivinar el resultado del cálculo del juego a mano, por lo que te encontró a ti, un estudiante de alto nivel en el departamento de informática de la Universidad de Tsinghua, que pediste ayuda, escribe un programa para la entrada de los datos del juego v1, v2, t, s, l, predicen el resultado del juego.
La entrada del formato de
  entrada es solo una línea, que incluye cinco enteros positivos v1, v2, t, s, l separados por espacios, donde (v1, v2 <= 100; t <= 300; s <= 10; l <= 10000 y Es un múltiplo común de v1 y v2). El
formato de salida
  contiene dos líneas. La primera línea genera el resultado del partido: una letra mayúscula "T" o "R" o "D", lo que significa que la tortuga ganó, el conejo ganó o ambos llegaron al mismo tiempo Terminar
  La segunda línea genera un número entero positivo, que indica el tiempo (en segundos) que le toma al ganador (o a ambas partes) llegar a la línea de meta.
Entrada de muestra
10 5 5 2 20
Salida de muestra
D
4
Entrada de muestra
10 5 5 1 20
Salida de muestra
R
3
Entrada de muestra
10 5 5 3 20
Salida de muestra
T
4

Idea:
De las condiciones dadas en la pregunta, se puede concluir que el tiempo de la tortuga es fijo, y solo el tiempo del conejo es incierto ¿Cómo determinar el tiempo del conejo de acuerdo con una distancia fija? Puedes pensarlo en sentido inverso, ¿cómo determinar la distancia de acuerdo con el tiempo del conejo?

1. La primera idea es muy simple, suponiendo que el tiempo del conejo y la tortuga es el mismo, es decir, independientemente de si el conejo ha pasado el punto final, antes de que la tortuga llegue al punto final, siempre ha seguido la regla de movimiento, comparando la distancia del conejo al mismo tiempo sobre la tortuga La suma determina si se debe detener o continuar para lograr el objetivo. Cuando la tortuga llega a la línea de meta, si suma> 0, el conejo corre lejos y gana, suma == 0, la misma distancia, y gana simultáneamente, suma <0, gana la tortuga. Pero la desventaja de este método es que el tiempo para que el conejo haga ejercicio debe calcularse por separado.
2. La idea normal es calcular directamente el tiempo del conejo y calcular el resultado final a través de un ciclo (siempre que la distancia entre los dos sea menor que la distancia).

#include<bits/stdc++.h>

using namespace std;

int main() {
	int v1,v2,t,s,l;
	cin >> v1 >> v2 >> t >> s >> l;
	int t1,t2,l2;
	t2 = l / v2;
	int v = v1 - v2;
	int sum = 0;
	for (int i = 0; i < t2; i++) {
		sum += v;
		l2 += v1;
		t1 ++;
		if(l2 > l){
			break;
		}
		if(sum >= t){
			i += s;
			t1 += s;
			sum = sum - (min(s,t2 - i - 1)) * v2;
		}			
	}
	if (l2 < l) {
		while(l2 < l) {
			l2 += v1;
			t1 += 1;
		}
	}
	if (t2 == t1){
		cout << "D" << endl << t2 << endl;
	}
	else if (t2 < t1) {
		cout << "T" << endl << t2<< endl;
	}
	else {
		cout << "R" << endl << t1<< endl;
	} 
	return 0;
} 

Lo anterior es el primer método, los resultados están bien, no sé por qué hay algunas presentaciones (¡la salida es exactamente la misma!), Es un poco mágico (¡corrígeme si entiendes a los grandes, lo agradecería!) Los métodos son los siguientes:

#include<bits/stdc++.h>

using namespace std;

int main() {
	int v1,v2,t,s,l;
	cin >> v1 >> v2 >> t >> s >> l;
	int t1 = 0, t2 = 0, l1 = 0, l2 = 0;
	while(l1 < l && l2 < l){
        if(l1 - l2 >= t){
            t2 += s;
            l1 = t1 * v1;
            l2 = t2 * v2;
        }
        else{
            t1++;
            t2++;
            l1 = t1 * v1;
            l2 = t2 * v2;
        }
    }
	if (l1 == l2){
		cout << 'D' << endl << t2;
	}
	else if (l1 < l2) {
		cout << 'T' << endl << l/v2;
	}
	else {
		cout << 'R' << endl << t2;
	} 
	return 0;
} 
Publicado 4 artículos originales · elogiado 3 · visitas 78

Supongo que te gusta

Origin blog.csdn.net/HERODING23/article/details/105594550
Recomendado
Clasificación