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
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
el número calculado de todos los programas en 10 . 9 7 tome la I
análisis de las ideas
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
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,
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
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.