#include<bits/stdc++.h>
#define N 2500
#define p 2333
#define f1(i,n,m) for(register int i=n;i<=m;i++)
#define ll long long
#define il inline
ll c[N+2][N+2], f[N+2][N+2];
il ll lucas(ll n, ll m) {
if (!m)return 1;
if (n == m)return 1;
if (n < m)return 0;
return c[n % p][m % p] * lucas(n / p, m / p) % p;
}
il ll F(ll n, ll k) {
if (k < 0)return 0;
if (!n)return 1;
if (!k)return 1;
if (n < p && k < p) return f[n][k];
return (F(n / p, k / p - 1) * f[n % p][p - 1] % p + lucas(n / p, k / p) * f[n % p][k % p] % p) % p;
}
il void prework() {
c[0][0] = f[0][0] = 1;
f1(i, 1, N)c[i][i] = c[i][0] = f[i][0] = 1;
f1(i, 1, N)f1(j, 1, i - 1)
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % p;
f1(i, 0, N)f1(j, 1, N)f[i][j] = (c[i][j] + f[i][j - 1]) % p;
}
signed main() {
ll t, n, k;
scanf("%d", &t);
prework();
while (t--) {
scanf("%lld%lld", &n, &k);
printf("%lld\n", F(n, k));
}
return 0;
}
如上,这是我的ac代码; 但是!!! 当我把数组设定为
ll c[N][N], f[N][N];
就会全部re??? 开大数组也不行,必须要加一个+2才能过; 求解答;