传送门
一道水题debug一上午 我一定要发上来纪念一下
//话说最近在做历年NOIP,T1和T2有一道必WA。。。。弱成这样我大概没救了QAQ
其实就是
C[n][m]=C[n−1][m−1]+C[n−1][m]
C
[
n
]
[
m
]
=
C
[
n
−
1
]
[
m
−
1
]
+
C
[
n
−
1
]
[
m
]
然后把前缀和预处理出来,就可以
O(1)
O
(
1
)
出答案啦/(ㄒoㄒ)/~~
而且我今天发现加了inline更慢了诶= =
using namespace std;
const int N=2001;
int t,k,n,m,c[N][N],a[N][N];
void read(int &x){
x=0;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar());
for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
}
int Min(int a,int b){
return a<b?a:b;
}
int main(){
read(t);read(k);
c[0][0]=1;
for(int i=1;i<N;i++)
for(int j=1;j<N;j++){
if (j<=i) c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;
if (j>i) a[i][j]=a[i][j-1];else a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+(!c[i][j]);
}
for(int i=1;i<=t;i++){
read(n);read(m);
printf("%d\n",a[n+1][Min(n,m)+1]);
}
return 0;
}
本文记录了一次解决NOIP经典组合数学题目时遇到的debug经历。通过递推公式计算组合数,并使用前缀和优化查询效率。文章还讨论了内联函数的实际应用效果。
1354

被折叠的 条评论
为什么被折叠?



