提交时间:2025-05-01 14:13:30
运行 ID: 37694
#include <bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair #define ll long long #define ull unsigned long long #define uint unsigned int #define bi __int128_t #define lb(x) ((x)&(-(x))) #define gp(i,j) (((i)>>(j-1))&1) #define ppc __builtin_popcount using namespace std; const int N=305;//mod=1e9+7; const ll inf=1e18+10; int mod,n,k,LM=303; void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} void Sub(int &a,int b){a-=b;if(a<0) a+=mod;} void Mul(int &a,int b){a=1ll*a*b%mod;} int qp(int a,int b){ int x=1; while(b){ if(b&1) Mul(x,a); Mul(a,a);b>>=1; }return x; } int f[N][N][N],sum1[N][N][N],sum2[N][N][N],ans[N][N]; void slv(){ cin>>n>>k; int o=n/2+1; cout<<ans[n][k-1]<<endl; } int main(){ int t=1;cin>>t>>mod; f[0][0][0]=1; for(int i=0;i<=LM;i++) sum1[0][i][0]=1,sum2[0][0][i]=1; for(int i=1;i<=LM;i++){ for(int j=0;j<=i;j++){ for(int k=0;k<=i;k++){ if(j!=0) Add(f[i][j][k],sum1[i-1][j-1][k]); if(k!=0) Add(f[i][j][k],sum2[i-1][j][k-1]); sum1[i][j][k]=f[i][j][k]; sum2[i][j][k]=f[i][j][k]; //if(i<=5) cout<<i<<' '<<j<<' '<<k<<' '<<f[i][j][k]<<endl; } }for(int j=0;j<=i;j++){ for(int k=1;k<=i;k++){ Add(sum1[i][k][j],sum1[i][k-1][j]); Add(sum2[i][j][k],sum2[i][j][k-1]); } } }for(int i=1;i<=LM;i++){ for(int j=1;j<=LM;j++){ ans[i][j]=ans[i][j-1]; if(j<=i){ for(int k=0;k<=j-1;k++){ Add(ans[i][j],sum2[i-1][k][j-1]); } for(int k=1;k<=j-2;k++){ Add(ans[i][j],sum1[i-1][k-1][j]); Add(ans[i][j],sum2[i-1][j][k-1]); } } //if(i==1) cout<<i<<' '<<j<<' '<<ans[i][j]<<endl; } } while(t--) slv(); return 0; }