acuerdo de acceso UPC- (Inverse Cantor ampliable)

El aprendizaje es como remar río arriba

acuerdo de acceso UPC- (Inverse Cantor ampliable)

Cantor Expand ← señalo mi punto

Tome 1 a N fueron N números consecutivos (1≤N≤9), que consta de todos los posibles N bits no se superponen cada número, en orden ascendente numerada. Cuando una entrada número M, N el número de bits que se pueden imprimir a cabo hasta el número correspondiente. Por ejemplo, cuando N = 3, puede estar compuesto de los tres dígitos: Aquí Insertar imagen DescripciónAsí que, cuando el número de entrada M = 2, la salida 132.

entrada

Se compone de dos números, es decir, un número entero positivo N (1 ≤ N ≤ 9) y el positivo número entero M (1 ≤ M ≤ 362.880).

exportación

Sólo una línea, es decir, el número N y M bits correspondientes a la entrada.

Ejemplo de entrada

3 2

Ejemplo de salida

132

Esta cuestión de cuándo tomar la carretera, de repente pensó en dos meses de repente vio un algoritmo llamado el
algoritmo de Cantor Cantor.matriz completa Cantor algoritmo, lo que significa que una secuencia hizo el siguiente orden descendente, entonces el algoritmo obtenido por Cantor Esta es la primera de variasPor ejemplo, la secuencia original es entonces 123 123 para el primer término a la segunda 132, y así sucesivamente. . .
A continuación, se encuentra este lugar y el significado de las preguntas son exactamente lo contrario, bien entonces nos basamos en el algoritmo Cantor operación inversa. En primer lugar, hacer alguna operación positiva.

Cantor Expand

expansión Cantor sigue
Descrito como un montón de palabras
En primer lugar, añadir 1, N ° 1, ya que la secuencia desde el principio.
Se define un número de columnas como 12345, un trastorno dado.
53412, cómo esta es la primera de varias.
Definimos N como el estado actual de todos los números digitales, es todavía detrás del número es menor que el número de su cuenta, como la espalda, entonces no hay un número 1, por lo que es 0.Tenga en cuenta que una vez eliminado
5 4 detrás de él de modo N . 1 =. 4, por lo que hay 1234 prosecuencia.
1 y 3, y hay N 2 y tiene dos 2 = 2, de modo que queda 124. Tal N . 3 = 2, N . 4 = 0, N . 5 = 0.
Así que después de usar la expansión
a n s = i = 1 n N i ( n i ) ! + 1 ans = \ sum_ {i = 1} ^ {n} N_ {i} * (ni)! + 1
4 4 ! + 2 3 ! + 2 2 ! + 0 1 ! + 0 0 ! + 1 = 113 4 * 4! + 2 * 3! + 2 * 2! + 0 * 1! + 0 * 0! + 1 = 113
ans disponibles es 113
Aquí Insertar imagen Descripción
entonces
inversa Cantor Ampliar¿Cómo se juegaSe?
Para jugar contra el canto.
Además de la factorial es ser fresco que se pierde
debido a que es la primera, más 1 por lo que el inverso del tiempo de menos afirmativa 1 primero
entonces
113-1 = 112.
Aceptar empezar por una causa sueño.
También puso cinco series
secuencia12345
Primero con 112 ÷ 4! = 4 ... 16
es pequeña de lo que son en todo ese número es 4, entonces el número de 4 + 1
es el número 5 es la quinta
secuencia en1234
Y luego con 16 ÷ 3! = 2 ... 4
de manera que toda la secuencia de interior más pequeño que tienen dos, así que este número es el número de 2 + 1
es el tercer número es 3
secuencia se convierte124
Y luego con 4 ÷ 2! = 2 ... 0
para que toda la secuencia en la que hay más pequeños que sus dos entonces el segundo número es el número de + 1
es el tercer número es 4
secuencia se convierte12
Y luego con un 0 ÷ 1! = 0 0 ...
para que toda la secuencia en la que hay menos de su número es 0, entonces el número 0 + 1
es el número 1 es la primera
secuencia se convierte2
Por lo que finalmente se convierte en 53412

Así que existe este problema dentro del gusto! ! !

Tiempo para AC

#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include <stack>
#include<string>
#include<math.h>
#include<stdio.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const ll ll_inf=9223372036854775807;
const int int_inf=2147483647;
const short short_inf=32767;
const char char_inf=127;
inline ll read() {
	ll c=getchar(),Nig=1,x=0;
	while(!isdigit(c)&&c!='-')c=getchar();
	if(c=='-')Nig=-1,c=getchar();
	while(isdigit(c))x=((x<<1)+(x<<3))+(c^'0'),c=getchar();
	return Nig*x;
}
#define read read()
ll j[]= {0,1,2,6,24,120,720,5040,40320,362880,3628800};
ll save[]= {1,2,3,4,5,6,7,8,9};
int main() {
	ll n,m;
	cin>>n>>m;
	ll t=m-1;
	for(ll i=n-1; i>=1; i--) {
		ll temp=t/j[i]+1;
		for(ll j=0; j<n; j++) {
			if(save[j]==-1)continue;
			temp--;
			if(!temp) {
				printf("%lld",save[j]);
				save[j]=-1;
				break;
			}
		}
		t%=j[i];
	}
	for(int i=0; i<n; i++)
		if(save[i]!=-1) printf("%lld",save[i]);
	return 0;
}

Frente almacenar el siguiente contenido factorial por lo que sería más conveniente.
fórmula Hou Kangtuo para comprender mejor la relación de dfs consumo

Subproducto de la rueda mes

Hay una planta de ruta para las pistas, sin límites de aprendizaje amarga para el barco.
Publicado 32 artículos originales · ganado elogios 12 · vistas 1189

Supongo que te gusta

Origin blog.csdn.net/qq_35339563/article/details/104270075
Recomendado
Clasificación