bzoj4737: 组合数问题
终于过了肝了一天啊,怎么我最近都在做细节码农题啊
(这种水平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: 组合数问题的更多相关文章
- BZOJ4737 组合数问题(卢卡斯定理+数位dp)
不妨不管j<=i的限制.由卢卡斯定理,C(i,j) mod k=0相当于k进制下存在某位上j大于i.容易想到数位dp,即设f[x][0/1][0/1][0/1]为到第x位时是否有某位上j> ...
- BZOJ4737 组合数问题 【Lucas定理 + 数位dp】
题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...
- 2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)
传送门 这是一道让我重新认识lucaslucaslucas的题. 考虑到lucaslucaslucas定理: (nm)≡(n%pm%p)∗(npmp)\binom n m \equiv \binom ...
- [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)
题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...
- 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 ...
- 计算一维组合数的java实现
背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- C++单元测试 之 gtest -- 组合数计算.
本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
随机推荐
- 第二个Activity返回数据
背景内容:FirstActivity先跳转到TwoActivity,再由TwoActivity返回,并还返回数据. 一般情况下Activity间跳转只需要调用 startActivity(Intent ...
- CSS——半透明
1.opacity:不仅背景半透明,内部其他元素也半透明 2.rgba():只有背景半透明. <!DOCTYPE html> <html lang="en"> ...
- servlet-响应信息的content-Type作用
package servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; im ...
- O-理解共享池
我们可以通过show sga命令查看共享池的整体组成部分: ....待截图.... 一.SGA内存结构 Oracle中SGA主要包括: 1.固定数据结构部分(FIXED Size) 2.数据块缓冲区( ...
- day05-控制流程之if/while/for
目录 控制流程之if判断 控制流程之while循环 控制流程之for循环 控制流程之if判断 if 其实就是根据条件来做出不同的反应,如果这样就这样干,如果那样就那样干 1. 如果:成绩 > 9 ...
- 扩增子图表解读1箱线图:Alpha多样性
箱线图 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在宏基因组领域,常用于展示样品组中各样品Alpha多样性的分布 第一种情 ...
- 我的FPGA
转眼间我都工作三个年头了,这两年多时间我一直从事着FPGA测试工作,从一开始的懵懂无知,到现在的些许理解,我想记录和分享我对FPGA测试的理解. 之所以选择在博客园写这样,是我发现在这里阅览文章不需要 ...
- swift-UINavigationController纯代码自定义导航控制器及底部工具栏的使用
step1:自定义一个类 NTViewController,该类继承UITabBarController: // // NTViewController.swift // Housekeeper / ...
- 【解题报告】 Leapin' Lizards HDU 2732 网络流
[解题报告] Leapin' Lizards HDU 2732 网络流 题外话 在正式讲这个题目之前我想先说几件事 1. 如果大家要做网络流的题目,我在网上看到一个家伙,他那里列出了一堆网络流的题目, ...
- python数字取反~
>>> a = [1,2,3,4,5,7,6,4,2,10] >>> h = len(a)//2 >>> h 5 >>> ~h ...