题目:
https://www.luogu.org/problem/show?pid=2822
水,想起去年这题我直接打的公式……20分……然后打错了freopen……;
现在……秒解;
感慨万千…………
离线操作:杨辉三角+二维前缀和;
总结:
注意递推边界和取模;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll k,t,dp[3003][3003],s,n,m,ans[3003][3003],ms;
bool flag=1;
void solve()
{
cin>>t>>k;
for(ll i=0;i<=2005;i++) dp[i][0]=1;
for(ll i=1;i<=2005;i++)
for(ll j=1;j<=i;j++)
{
dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%k;
if(dp[i][j]==0) ans[i][j]=1;
}
for(ll i=1;i<=2005;i++)
for(ll j=1;j<=2005;j++)
ans[i][j]+=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];
while(t--)
{
scanf("%lld%lld",&n,&m);
printf("%lld\n",ans[n][m]);
}
}
int main()
{
solve();
return 0;
}