UPC-Knight (una combinación de los fundamentos de las matemáticas, inversa)

El aprendizaje es como remar río arriba

Caballero

título Descripción

Hay un caballero - la pieza de ajedrez - en el origen (0,0) de una rejilla de dos dimensiones.
Cuando el caballero está en la plaza (i, j), se puede mover a cualquiera de (i + 1, j + 2) o (i + 2, j + 1).
¿De cuántas maneras puede el caballero llegar a la plaza (X, Y)?
Encontrar el número de formas modulo 10 9 7.
Restricciones
· 1≤X≤10 6
· 1≤Y≤10 6
· Todos los valores de entrada son enteros.

entrada

De entrada se da desde la entrada estándar en el formato siguiente:
XY

exportación

Imprimir el número de maneras para el caballero a alcance (X, Y) a partir de (0,0), módulo 10 9 7.

Ejemplo de entrada 1

3 3

Salida de muestra 1

2

Ejemplo de entrada 2

999999 999999

Salida de muestra 2

151840682

Ejemplo de entrada 3

2 2

Salida de muestra 3

0

efecto tema
en el ajedrez, ajedrez chino caballero movimientos similares, pero sus movimientos es 2 + 1,
lo que significa
avanzar dos casillas para ir a la derecha un espacio
paseo dos casillas hacia delante un espacio hacia la izquierda para ir
hacia atrás gire a la derecha para ir dos cuadrados de una cuadrícula
se remontan dos espacios vaya a la izquierda de un espacio de
la izquierda para ir dos plazas para avanzar un espacio de
izquierda para volver a ir dos cuadrados de una rejilla
de inmediato dos plazas para avanzar un espacio
a la derecha ir hacia adelante dos espacios después de una cuadrícula
total de ocho movimientos
como se indica en
Aquí Insertar imagen Descripción
el título quiere a calcular a partir de (0,0) a (x, y) el caballero puede llegar a ese punto, sin embargo, por desgracia, esto sólo puede estar a la derecha o al paseo subir
es como se muestra en Aquí Insertar imagen Descripción
el número calculado de todos los programas en 10 . 9 7 tome la I

análisis de las ideas
Aquí Insertar imagen Descripción
Esta pregunta y métodos similares, este hombre pasó de A a B, entonces el número de maneras que
es, tiene que tomar el paso correcto 5, subir tres escalones. Sin embargo, a la derecha en la incertidumbre en la Shashi Hou
entonces sabemos que hay

C 5 8 o C 3 8 especie lata lata , que 56 especie Cómo caso C_ {5} ^ {8} o C_ {3} ^ {8} posibles, es decir, 56 tipos de soluciones
entonces esta pregunta es similar, pero para tomar el caballero dio dos boletos para subir a la derecha o a la derecha para tomar un paseo hasta las dos estrategias, todos los cuales dicen todo el bien,Esta pregunta es cuántos elegir la Opción 1 y Opción 2

Entonces podemos resolver la ecuación
2M + ① X = n-
m + 2N = Y ②
de modo que podemos determinar los valores de X e Y
pueden ser obtenidos por
m = (2X-Y) /. 3
n- = (2Y-X) /. 3
de manera que si m y n no pueden estar seguros de que no divisible por 3 solución
seguido de, Aquí Insertar imagen Descripción
esto debe ser mueve imposibles, es decir, n y m no puede hacer que el acceso directo a un cierto valor negativo

De acuerdo con tarde
C metro norte = norte ! * ( metro ! ) - 1 * ( ( norte - metro ) ! ) - 1 C_ {m} ^ {n} = n * (m!) ^ {- 1} * ((nm)!) ^ {- 1}
puede ser de nuevo de acuerdo con inversa
elemento inverso de cada diez. 97 tomo
puede hacer que X-1es equivalente a X1E9 + 5.
El principio módulo de congruencia, (a b *)% c
después de la inversa, además de los cambios a multiplicarse. Por lo tanto solucionable

Tiempo para AC

#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<queue>
#include <stack>
#include<string>
#include<utility>
#include<math.h>
#include<stdio.h>
#define PI 3.1415926536
#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 A = 1e9 + 7;
ll B = A - 2;
ll qpow(ll x, ll n, ll mod)
{
	ll res = 1;
	while (n > 0)
	{
		if (n & 1)res = (res * x) % mod;
		x = (x * x) % mod;
		n >>= 1;
	}
	return res;
}
ll fac(ll n)
{
	ll res = 1;
	for (int i = 1; i <= n; i++)
	{
		res *= i;
		res %= A;
	}
	return res;
}
int main()
{
	ll X, Y;
	X = read, Y = read;
	ll m, n;
	m = X + X - Y;
	n = Y + Y - X;
	if (m % 3 || n % 3 || m < 0 || n < 0)
	{
		cout << 0 << endl;
		return 0;
	}
	else
	{
		m /= 3;
		n /= 3;
		ll temp_a = fac(m + n) % A;
		ll temp_b = fac(n) % A;
		ll temp_c = fac(m) % A;
		ll ans = temp_a;
		temp_b = qpow(temp_b, B, A);
		ans = (ans * temp_b) % A;
		temp_c = qpow(temp_c, B, A);
		ans = (ans * temp_c) % A;
		cout << ans % A << endl;
	}
}

Además del cambio después de que el viaje no era el inverso no factoriales sabe cómo hacer frente a la explosión de datos no pudo iniciar, olvidar la inversa. Según inversa, la combinatoria, la congruencia teoremas molde, la energía rápida. Este problema puede ser resuelto.

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 1188

Supongo que te gusta

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