codeforces 1194 D. 1-2-K Juego

Solución uno:

Para cada pregunta que está destinado a ser visto desde una posición siempre y cuando la parte superior se puede llegar a una posición de perder, la ventaja va a ganar; 0 es conocido como el gato al perder la posición, atravesando el 1-n, y luego haga clic en OK; tiempo de complejidad es O (TN) espacio de complejidad O (n) .MLE, TLE, así que no prestan atención al problema de la complejidad del tiempo, pero también le preocupa la complejidad del espacio;

#include <bits / STDC ++ h.> 
using namespace std; 

anulará solve (); 

int main () 
{ 
	int T; 
	cin >> T; 

	for (int t = 0; t <T; t ++) resolver (); 

	return 0; 
} 

Void resolver () 
{ 
	int n, k; 
	cin >> n >> k; 
	vector <int> estado (n + 1, 0); 

	for (int i = 1; i <= n; i ++) 
	{ 
		if ((i - 1> = 0 && estado [i - 1] == 0) || (i - 2> = 0 && estado [i - 2 ] == 0) || (i - k> = 0 && estado [i - k] == 0)) estado [i] = 1; 
	} 

	Si (estado [n] == 1) cout << "Alicia" << endl; 
	else cout << "Bob" << endl; 

	regreso; 
}

  

Solución de dos :( ah, esto es muy difícil pensar, cómo encontrar la ley, cuando hay un tiempo incierto, se puede ver la relación con el resto de la ley para determinar la condición del hallazgo. Doble juego de azar Lo más importante es encontrar el estado perderá o ganará estado)

Cuando sólo 2 tipos de tiempo movimiento, (0, 3, 6, 9 ..... 3x) posición es la posición de perder la ventaja, la ventaja para ganar la posición de reposo;

! Cuando k% 3 = 0, o 1 o 2, la mano superior para el 3x perder los bits, los bits restantes ganar mano superior;

Cuando k% 3 == 0, cuando i <k, i% 3 == 0 es sente perder los bits, i == K, el lado superior es una posición ganadora. k + 1 bits de la pérdida de la ventaja, de acuerdo con la n-bloque k + 1, n% = k + 1, si (n == 0) perder la ventaja, si n == k mano superior va a ganar, si el restante n% 3 == 0 perder la ventaja, la ventaja va a ganar de otra manera;

#include <bits / STDC ++ h.> 
using namespace std; 

anulará solve (); 

int main () 
{ 
	int T; 
	cin >> T; 

	for (int t = 0; t <T; t ++) resolver (); 

	return 0; 
} 

Void resolver () 
{ 
	int n, k; 
	cin >> n >> k; 

	si (k% 3 = 0!) 
	{ 
		si (n% 3 == 0) cout << "Bob" << endl; 
		else cout << "Alicia" << endl; 
	} 
	Más 
	{ 
		n% = (k + 1); 

		si (n == k || n% 3 = 0!) cout << "Alicia" << endl; 
		else cout << "Bob" << endl; 
	} 
}

  

Supongo que te gusta

Origin www.cnblogs.com/mychen06/p/12604067.html
Recomendado
Clasificación