终于过了肝了一天啊,怎么我最近都在做细节码农题啊

(这种水平NOIP凉凉??)

luacs大家都可以想到用吧,一开始我的思路是把所有在p以内的%p==0的组合数预处理出来,那C(n/p,m/p)任取,但是好像有重算

仔细思考,其实一个组合数可以拆分成很多个C(x%p,y%p) x<y就有是k的倍数,把这个东西看成p进制,得到推论C(i,j)不是p的倍数当且仅当k进制下i的每一位分别大于等于j

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=1e9+; int alen,a[],blen,b[];
LL S(LL x){return x%=mod,x*(x+)/%mod;}
LL cal(LL a,LL b)
{
if(a<b)b=a;
return (S(a)-S(a-b))%mod;
}
LL f[][][];//第i个位,是否在n的上界边缘,是否在m的上界边缘,每一位i都大于等于j的方案数
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int T,K;
scanf("%d%d",&T,&K);
while(T--)
{
LL n,m,k;
scanf("%lld%lld",&n,&m);if(n<m)m=n;
alen=,k=n;while(k>)a[++alen]=k%K,k/=K;
blen=,k=m;while(k>)b[++blen]=k%K,k/=K;
for(int i=blen+;i<=alen;i++)b[i]=; int len=alen;
memset(f,,sizeof(f));
for(int u=;u<=a[len];u++)
for(int v=;v<=b[len];v++)
{
if(u>=v)
{
if(u==a[len]&&v==b[len])f[len][][]++;
else if(u==a[len])f[len][][]++;
else if(v==b[len])f[len][][]++;
else f[len][][]++;
}
}
int c;
for(int i=len-;i>=;i--)
{
c=;
for(int u=;u<K;u++)
for(int v=;v<K;v++)
{
if(u>=v)
{
if(u<a[i])
{
if(v<b[i])
{
c++;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
}
if(u==a[i])
{
if(v<b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
}
if(u>a[i])
{
if(v<b[i])
{
f[i][][]=(f[i][][]+f[i+][][]+f[i+][][])%mod;
}
if(v==b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
if(v>b[i])
{
f[i][][]=(f[i][][]+f[i+][][])%mod;
}
}
}
}
} LL ans=cal(n+,m+);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
ans=(ans-f[][i][j])%mod;
printf("%lld\n",(ans+mod)%mod);
}
return ;
}

bzoj4737: 组合数问题的更多相关文章

  1. BZOJ4737 组合数问题(卢卡斯定理+数位dp)

    不妨不管j<=i的限制.由卢卡斯定理,C(i,j) mod k=0相当于k进制下存在某位上j大于i.容易想到数位dp,即设f[x][0/1][0/1][0/1]为到第x位时是否有某位上j> ...

  2. BZOJ4737 组合数问题 【Lucas定理 + 数位dp】

    题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...

  3. 2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)

    传送门 这是一道让我重新认识lucaslucaslucas的题. 考虑到lucaslucaslucas定理: (nm)≡(n%pm%p)∗(npmp)\binom n m \equiv \binom ...

  4. [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)

    题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...

  5. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  6. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  7. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  8. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  9. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

随机推荐

  1. VC使用CryptoAPI计算MD5

    // md5.h #include <tchar.h> #include <wincrypt.h> // 计算Hash,成功返回0,失败返回GetLastError() // ...

  2. 汇总——WEB前端资源网

    前端攻城师 爱思资源网 HTML5吧 0101后花园 前端网 编程教程和源代码示例 Javascript中文网 Web前端资源网 移动端HTML5资源整理 Web开发者 SegmentFault 前端 ...

  3. C#使用Win32函数的一些类型转换

    C#在访问Win 32 Api时需要处理C 结构与C#结构的映射,这在MSDN以及许多Blog上都可以找到参考的资料.Win 32 中有一些定义复杂的Struct,这些结构体拥有长度固定的数组或者一些 ...

  4. PHP 之base16加密解密封装

    /** * @Description: base16加密 * @Author: Yang * @param $data * @return string */ function base16_enco ...

  5. jQuery如何追加tr到table中 添加到头或者尾

    jQuery 添加新内容有以下四个方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() ...

  6. windows下python-nmap运行过程中出现的问题及解决办法

    python-nmap 运行时出现了一下错误 D:\python\untitled5\Scripts\python.exe D:/python/untitled5/test.py Traceback ...

  7. 5.terms搜索多个值以及多值搜索结果优化

    主要知识点 terms搜索多个值,并和term的比较     一.term和terms terms是在这个字段中搜索多个值,相当于sql中的in语法 (select * from tbl where ...

  8. vs2015 配置 cplex

    首先设置模式为Release, 根据软件选择x86或x64 附加库目录(链接器 - 常规) C:\Program Files\IBM\ILOG\CPLEX_Studio128\cplex\lib\x6 ...

  9. debian 7 安装

    1. 从 live cd 或者 dvd 进行安装,官方文档已经够用,可以将 live cd 写进 u 盘,也可以将 dvd 放到硬盘上通过 grub 引导启动安装,文档在这里. 2.安装过程中尽量选择 ...

  10. List多字段排序,orderBy,ThenBy

    List排序问题,orderBy,ThenBy 1.List中一个字段排序 前几天做的项目中,获取的List<T>需要用某个字段来进行排序,困扰了很久.用OrderBy解决了.具体是这样的 ...