El puente azul de la Copa 2018 Grupo B de las Naciones 04-- relojes de tono


Título: el tono del reloj

Xiao Ming compró un ambiente de alta gama del grado de relojes electrónicos, que se prepara para el tiempo de transferencia aún.
M78 en diferentes unidades de nebulosa de medición, el tiempo y la tierra, los n-nebulosa minutos a una hora M78.
Como todos sabemos, sólo hay un botón para ver el número actual más uno.
En sintonía minutos para el final, si el número que se muestra actualmente es 0, entonces haga clic en el botón se vuelve 1, la prensa vuelve a ser 2.
Si el número actual es n - 1, después de prensa se convertirá en cero. Como TOC, Xiao Ming debe tomar el tiempo para ver el tono adecuado.
Si la hora en su reloj más de 1 a la hora actual, el YAOAN n - 1 más un botón puede ser transferido de nuevo a la hora correcta.
Xiao Ming pensar, si el reloj puede añadir un botón para indicar el número actual más k ah bueno ......
Se preguntó si tenía + botón k y siga el botón de estrategia óptima , transferido a otro de cualquiera de un número de minutos cualquiera de un número de minutos será de acuerdo con la mayoría de las veces .
Tenga en cuenta que, cuando la prensa botón + k, el número k si se añade más de n-1, estará en el módulo n.
Por ejemplo, n = 10, k = 6, cuando supone que el tiempo actual es 0, el botón de doble clic 2 + k se ajusta a 2.

"Formato de entrada"
línea de dos enteros n, k, es decir, como el título.

"Formato de salida"
línea de un número entero
, dicho: de acuerdo con botón estrategia óptima, transferido de un tiempo a otro tiempo será conforme a la mayoría de las veces.

"Entrada de la muestra"
53

"Salida de muestra"
2

"Muestra explicó,"
Si el tiempo es correcto, presione 0 veces. De lo contrario, la relación entre el número y la serie de operaciones YAOAN sigue:
1: 1
2: 1, 1
3: 3
4: 3, 1

"Rango de datos"
de 30% de los datos 0 <k <n - <= 5.
0 <k <n - <= 100 para el 60% de los datos
100% de los datos 0 <k <n <= 100 000

Recursos para:
pico de consumo de memoria (incluyendo máquinas virtuales) <256M
el consumo de CPU <1000ms

Por favor, seguir estrictamente las exigencias de la producción, no superflua para imprimir algo como: "Por favor, introduzca ..." contenido no deseado.

Nota:
principales necesidades de función para volver 0;
uso exclusivo ANSI C / ANSI C ++ estándar,
no llame a la función especial depende del entorno de construcción o sistema operativo.
Todas las funciones dependientes deben explícitamente en el archivo de origen # include <xxx>
no pueden ser proporcionados por la ingeniería de cabecera común se omite.

Cuando el proceso de envío, prestar atención para seleccionar el idioma deseado y compilador de tipo tipo.

 

Las ideas: primero en amplitud de búsqueda, el valor calculado de búsqueda más profunda profundidad de toda diferencia de tiempo, la respuesta fue

#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int n,k,a[100002];  //a[i]存放当 相差步数为 i 时,需要按的次数 
void bfs(){
	queue<int>q;
	fill(a,a+100002,-1);
	a[0]=0;
	q.push(0);
	int top,x,y;  //x存放按 k增长的所能达到的时刻,y存放按 1增长所能达到的时刻 
	while(!q.empty()) {
		top=q.front();q.pop();
        x=(top+k)%n;
        if(a[x]<0){
        	a[x]=a[top]+1;
        	q.push(x);
		}
		y=top+1;
		if(y!=n){   //相差时刻最多为 n-1 
			if(a[y]<0){
				a[y]=a[top]+1;
				q.push(y);
			}
		}
	}
	cout<<a[top]<<endl;   //队列中最后一个出队的会记录在top最后更新的值 
}
int main(){
	cin>>n>>k;
	bfs();
	return 0;
}


 

Publicado 42 artículos originales · alabanza ganado 16 · vistas 3417

Supongo que te gusta

Origin blog.csdn.net/qq_41542638/article/details/90440987
Recomendado
Clasificación