#include <iostream>
using namespace std;
const int MODULO = 1000000000 + 7;
int fastPot(long long p, unsigned int w)
{
if(w == 0) return 1;
if(w == 1) return p;
int x = 1;
while(w > 0)
{
if (w % 2 == 1)
x = (int)((x * (p % MODULO)) % MODULO);
p *= p;
w /= 2;
}
return x;
}
int calc(int len, int x, int all)
{
if(x <= 0) return 0;
if(len == 1) return 0;
if(len == 2) return x;
return (
fastPot(x, len - 1) % MODULO +
(
(calc(len - 2, x, all) % MODULO) *
(calc(all - (len - 2), x - 1, all) % MODULO)
) % MODULO
) % MODULO;
}
int main()
{
int n, m; cin>>n>>m;
cout<<calc(n, m, n)<<'\n';
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; const int MODULO = 1000000000 + 7; int fastPot(long long p, unsigned int w) { if(w == 0) return 1; if(w == 1) return p; int x = 1; while(w > 0) { if (w % 2 == 1) x = (int)((x * (p % MODULO)) % MODULO); p *= p; w /= 2; } return x; } int calc(int len, int x, int all) { if(x <= 0) return 0; if(len == 1) return 0; if(len == 2) return x; return ( fastPot(x, len - 1) % MODULO + ( (calc(len - 2, x, all) % MODULO) * (calc(all - (len - 2), x - 1, all) % MODULO) ) % MODULO ) % MODULO; } int main() { int n, m; cin>>n>>m; cout<<calc(n, m, n)<<'\n'; } |
English