[NOIP2016D2T1]组合数问题

来源:互联网 发布:netstat 端口状态 编辑:程序博客网 时间:2024/06/08 06:43

传送门https://www.vijos.org/p/2006
一道水题debug一上午 我一定要发上来纪念一下
//话说最近在做历年NOIP,T1和T2有一道必WA。。。。弱成这样我大概没救了QAQ
其实就是C[n][m]=C[n1][m1]+C[n1][m]
然后把前缀和预处理出来,就可以O1出答案啦/(ㄒ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;}