• BZOJ 4591 【SHOI2015】 超能粒子炮·改


    题目链接:超能粒子炮·改

      这道题的大体思路就是用(lucas)定理,然后合并同类项,就可以得到一个可以递归算的式子了。

      我们用(S(n,k))表示答案,(p)表示模数((2333)是一个质数),那么有:

    egin{aligned}
    S(n,k)&=sum_{i=0}^kinom{n}{i} \
    &=sum_{i=0}^kinom{nmod p}{i mod p}inom{lfloor frac{n}{p} floor}{lfloor frac{i}{p} floor}
    end{aligned}

      为了接下来方便表示,不妨设(k=k_1p+k_2(k_2<p))

      我们按(lfloor frac{i}{p} floor)的值进行分类计算。由于前面有(k_1)块是满的,最后一块不满,所以分两部分计算。

    egin{aligned}
    S(n,k) &=sum_{i=0}^kinom{nmod p}{i mod p}inom{lfloor frac{n}{p} floor}{lfloor frac{i}{p} floor} \
    &=sum_{i=0}^{k_1-1}inom{lfloor frac{n}{p} floor}{i}sum_{j=0}^{p-1}inom{n mod p}{j}+sum_{i=k_1p}^kinom{n mod p}{i mod p}inom{lfloor frac{n}{p} floor}{lfloor frac{i}{p} floor} \
    &=S(lfloor frac{n}{p} floor,k_1-1)S(n mod p,p-1)+inom{lfloor frac{n}{p} floor}{k_1}S(n mod p,k mod p)
    end{aligned}

     所以预处理(p)以内的组合数以及组合数的前缀和就可以递归算了。组合数用(lucas)算一算就好。

  • 相关阅读:
    Splay
    AVL
    Everything 搜索文件
    佛祖保佑 永无Bug
    火绒注入
    STL vector list map 用法
    漏洞挖掘 向目标进程中植入代码
    漏洞挖掘 利用漏洞控制程序执行流程
    漏洞挖掘 堆栈的溢出实践
    追码CM破解笔记
  • 原文地址:https://www.cnblogs.com/lcf-2000/p/6793022.html
Copyright © 2020-2023  润新知