码迷,mamicode.com
首页 > 其他好文 > 详细

vijos 2006

时间:2017-10-27 13:40:22      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:print   type   printf   color   +=   algo   记录   容斥   mic   

排列组合。

递推式C(n,m)=C(n-1,m)+C(n-1,m-1)。

容斥+前缀和记录一下即可,询问O(1)。

#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
int read(){
    char c; while(!isdigit(c=getchar())); int x=c-0;
    while(isdigit(c=getchar())) x=x*10+c-0; return x;
}
int c[2001][2001],sum[2001][2001];
int main(){
    int t=read(),k=read();
    for(int i=0;i<=2000;i+=1)
        for(int j=0;j<=i;j+=1){
            if(i==j || !j) c[i][j]=1;
            else c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
        }
    for(int i=0;i<=2000;i+=1)
        for(int j=0;j<=2000;j+=1){
            if(i>=j) sum[i][j]=!c[i][j];
            if(j<=i && j>=1) sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
            if(j>i) sum[i][j]+=sum[i][j-1];
        }
    while(t--){
        int n=read(),m=read();
        printf("%d\n",sum[n][m]);
    }
    return 0;
}

 

vijos 2006

标签:print   type   printf   color   +=   algo   记录   容斥   mic   

原文地址:http://www.cnblogs.com/oris71/p/7742305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!