。。。最近考了一道数学题。是典型的隔板问题。

P.S.最近八中oj上面没有系统地刷过题

题面可以直接转化为m个球分到n个箱子,每个箱子至少放1个,前n1个箱子的球数必须满足全部小于等于A[i],接着n2个必须大于等于A[i],剩下随意,问方案。

在没有约束时,答案自然是C(M-1,N-1),这个用插板法很好想>0<

考虑第二种约束,我们只要先提前在篮子里钦定A[i]-1个球,那么剩下随便放就一定能满足了。

对付第一种约束,我们用容斥原理来实现。所有方案数-至少有一个错误+至少两个错误-至少三个错误······

设w(k)为至少前面有k个篮子产生错误的方案数,我们可以在对应错误箱子放A[i]个,进行插板。这个dfs一下就ok了,因为n1,n2非常小!!!

但是n,m可以很大,p也不是质数所以用不了Lucas。所以可以用组合数模。

但是我不会。。要用到很多奇怪的定理比如说中国剩余定理。

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll f[],a[],b[],c[],d[],e[],pri[+],fac[+];
+];
ll cnt,t,x,y,top,tot,n1,n,m,n2,p,pp,ans;
ll quickmi(ll x,ll y,ll p)
{
    );)return x%p;
    ll tmp=,a=x;
    )
    {
        ==){tmp=tmp*a%p;} a=a*a%p;y/=;
    }   return tmp;
}
ll gcd(ll a,ll b,ll &x,ll &y){
    ){
        x=;y=;return a;
    }else{
        ll tmp=gcd(b,a%b,x,y);
        ll t=x;x=y;y=t-a/b*y;return tmp;
    }
}
ll calcfac(ll n,ll p,ll pp){
    if (n<pp) return fac[n];
    ll t=quickmi(fac[p-],n/p,p);
    t=t*fac[n%p]%p;
    cnt+=n/pp;
    t=t*calcfac(n/pp,p,pp)%p;
    return t;
}
ll getni(ll xx,ll yy){//exgcdÇóxx¹ØÓÚyyµÄÄæÔª
    ll tmp=gcd(xx,yy,x,y);
    return (x%yy+yy)%yy;
}
ll calc(ll x,ll y,ll p,ll pp)
{
    fac[]=;
    ;i<=p-;i++)
      )fac[i]=fac[i-];]*i%p;
    cnt=;
    ll A=calcfac(y,p,pp);ll tot=cnt;cnt=;
    ll B=calcfac(x,p,pp);B=B*calcfac(y-x,p,pp)%p;
    B=getni(B,p);
    return A*B%p*quickmi(pp,tot-cnt,p)%p;
}
ll comb(ll x,ll y,ll p){
    ;
    ;i<=top;i++)a[i]=calc(x,y,d[i],e[i]);
    ;i<=top;i++)b[i]=getni(c[i],d[i]);
    ll t=;
    ;i<=top;i++)t=(t+a[i]*b[i]%p*c[i]%p)%p;
    return t;
}
void dfs(ll id,ll m,ll cnt){
    ){
        ll t=comb(n-,m-,p);
        //printf("<>==%lld %lld %lld\n",m,n,t);
        ==)ans=(ans-t+p)%p;else ans=(ans+t)%p;
        return;
    }
    dfs(id+,m,cnt);
    ,m-f[id],cnt+);
}
int main()
{
    int cas;
    scanf("%d%lld",&cas,&p);
    ;i<=;i++)
    {
        )tot++,pri[tot]=i;
        ;j<=tot;j++){
            )break;
            flag[pri[j]*i]=;
            )break;
        }
     }
    pp=p; top=;
    ;i<=tot;i++){
        ){
            top++;d[top]=;e[top]=pri[i];
            ){
               d[top]*=pri[i];
               pp/=pri[i];
            }
        }
    }
    ;i<=top;i++)c[i]=p/d[i];
    while(cas--)
    {
        scanf("%lld%lld%lld%lld",&n,&n1,&n2,&m);
        ;i<=n1;i++)scanf("%lld",&f[i]);
        ;i<=n2;i++){
            ll x;scanf("%lld",&x);
            )m-=x-;
        }
        if(m<n1){
            printf("0\n");continue;
        }
        ans=;
        dfs(,m,);
        printf("%lld\n",ans);
    }
}

bzoj3129

[SDOI2013]方程的更多相关文章

  1. bzoj3129[Sdoi2013]方程 exlucas+容斥原理

    3129: [Sdoi2013]方程 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 582  Solved: 338[Submit][Status][ ...

  2. BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理

    BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程     X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A ...

  3. 【BZOJ3129】[SDOI2013]方程(容斥,拓展卢卡斯定理)

    [BZOJ3129][SDOI2013]方程(容斥,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 因为答案是正整数,所先给每个位置都放一个就行了,然后\(A\)都要减一. 大于的限制和没有的区别不大, ...

  4. bzoj千题计划267:bzoj3129: [Sdoi2013]方程

    http://www.lydsy.com/JudgeOnline/problem.php?id=3129 如果没有Ai的限制,就是隔板法,C(m-1,n-1) >=Ai 的限制:m减去Ai &l ...

  5. [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】

    题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...

  6. BZOJ3129 [Sdoi2013]方程 【扩展Lucas】

    题目 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个 ...

  7. BZOJ 3129 [SDOI2013]方程 (拓展Lucas)

    题目大意:给定一个方程$X_{1}+X_{2}+X_{3}+X_{4}+...+X_{n}=M$,$\forall X_{i}<=A_{i} (i<=n1)$ $\forall X_{i} ...

  8. BZOJ 3129 SDOI2013 方程

    如果没有限制,答案直接用隔板法C(m-1,n-1) 对于>=x的限制,我们直接在对应位置先放上x-1即可,即m=m-(x-1) 对于<=x的限制,由于限制很小我们可以利用容斥原理将它转化为 ...

  9. BZOJ3129: [Sdoi2013]方程

    拓展Lucas+容斥原理 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cs ...

随机推荐

  1. Brackets前端开发IDE工具

    Brackets是一个开源的前端开发IDE工具,网页设计师和前端开发人员必备的前端开发IDE工具. 它能够使你在开发WEB网站实时预览你的网页,目前版本只适用于Chrome浏览器可以实时预览效果 支持 ...

  2. ppt2013技术整理

    1. 显示选择窗格 便于选择该页的所有元素.分组.隐藏与显示等. 位于:开始-编辑-选择-选择窗格 2. 显示动画窗格 便于调节页面中元素的动画状态. 位于:动画-高级动画-动画窗格 3. 绑定动画触 ...

  3. 战神Z7 D2安装黑苹果OS X El Capitan 10.11.2

    安装之初状态:两块硬盘,都是MBR格式分区,一块是机械硬盘,安装了WIN7 32位和Linux,一块是SSD,安装的是WIN7 64位与WIN10 64位以前玩过Mavericks,安装的就是在硬盘的 ...

  4. Verilog笔记——YUV2RGB的模块测试

    1 YUV2RGB的模块如下: module yuv2rgb( clk, //时钟输入 rstn, //复位输入,低电平复位 y_in, //变换前Y分量输出 cb_in, //变换前Cb分量输出 c ...

  5. [UML]UML系列——包图Package

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

  6. DirectX SDK

    http://blog.csdn.net/c4501srsy/article/details/17403927 http://blog.csdn.net/yy649487394/article/det ...

  7. [Data Structure] 数据结构中各种树

    数据结构中有很多树的结构,其中包括二叉树.二叉搜索树.2-3树.红黑树等等.本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂. 1. 二叉树 二叉树是数据结构中一种重要 ...

  8. TopHat

    What is TopHat? TopHat is a program that aligns RNA-Seq reads to a genome in order to identify exon- ...

  9. Tomcat+ssh+Mysql本地正常,远程服务器中文乱码。(转)

    ssh2+mysql中文乱码解决方法(统一使用UTF-8编码) 中文乱码,首先要区分是页面乱码.action乱码,还是数据库乱码.大致的原理是java使用unicode编码– >window使用 ...

  10. 【经验】在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序

    以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面.出现一些问题,搜索引擎查了一些网站和资料,发现很多人问到这个问题,给出的结果我试了试,大部分都不正确. 给出我试的顺序,可能会对大 ...