2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)
传送门
这是一道让我重新认识lucaslucaslucas的题。
考虑到lucaslucaslucas定理:
(nm)≡(n%pm%p)∗(npmp)\binom n m \equiv \binom {n\%p} {m\%p}*\binom{\frac n p}{\frac m p}(mn)≡(m%pn%p)∗(pmpn) (mod(mod(mod p)p)p)
所以可以看成(nm)\binom n m(mn)在p进制下的表示
于是这道题就可以用这个方法转换成求C(i,j)C(i,j)C(i,j)某一个进制位上满足ip<jpi_p<j_pip<jp的方案数。
然后可以通过容斥转一转变成求某一位ip≥jpi_p\geq j_pip≥jp的方案数。
于是就可以上数位dpdpdp了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
const int mod=1e9+7,inv2=(mod+1)/2;
int T,k,f[70][2][2],sum[105][105],numn[70],numm[70],lenn=0,lenm=0;
inline int S(ll x){return x%=mod,(ll)x*(x+1)%mod*inv2%mod;}
inline int calc(ll a,ll b){return (S(a)-S(a-min(a,b))+mod)%mod;}
int main(){
scanf("%d%d",&T,&k);
for(int i=0;i<=k;++i)for(int j=0;j<=k;++j)sum[i][j]=calc(i,j);
while(T--){
scanf("%lld%lld",&n,&m);
if(n<m)m=n;
int ans=calc(n+1,m+1);
memset(f,0,sizeof(f)),lenn=lenm=0;
while(n)numn[++lenn]=n-n/k*k,n/=k;
while(m)numm[++lenm]=m-m/k*k,m/=k;
while(lenm<lenn)numm[++lenm]=0;
f[n=lenn][1][1]=1;
for(int i=n;i;--i){
int upn=numn[i],upm=numm[i];
f[i-1][1][1]=f[i][1][1]*(upn>=upm);
f[i-1][1][0]=((ll)f[i][1][0]*(upn+1)%mod+(ll)f[i][1][1]*min(upn+1,upm)%mod)%mod;
f[i-1][0][1]=((ll)f[i][1][1]*max(upn-upm,0)%mod+(ll)f[i][0][1]*(k-upm)%mod)%mod;
f[i-1][0][0]=(((ll)f[i][0][0]*sum[k][k]%mod+(ll)f[i][0][1]*sum[k][upm])%mod+((ll)f[i][1][0]*sum[upn][k]%mod+(ll)f[i][1][1]*sum[upn][upm]%mod)%mod)%mod;
}
for(int i=0;i<2;++i)for(int j=0;j<2;++j)ans=(ans-f[0][i][j]+mod)%mod;
printf("%d\n",ans);
}
return 0;
}
2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)的更多相关文章
- 【NOI2019模拟2019.6.29】组合数(Lucas定理、数位dp)
Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p} ...
- 2018.10.31 NOIP模拟 几串字符(数位dp+组合数学)
传送门 如果观察到性质其实也不是很难想. 然而考试的时候慌得一批只有心思写暴力233. 下面是几个很有用的性质: c0,1+1≥c1,0≥c0,1c_{0,1 }+1 ≥ c_{1,0} ≥ c_{0 ...
- 2018.10.27 bzoj3209: 花神的数论题(数位dp)
传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...
- [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)
题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...
- 【算法学习笔记】组合数与 Lucas 定理
卢卡斯定理是一个与组合数有关的数论定理,在算法竞赛中用于求组合数对某质数的模. 第一部分是博主的个人理解,第二部分为 Pecco 学长的介绍 第一部分 一般情况下,我们计算大组合数取模问题是用递推公式 ...
- 大组合数:Lucas定理
最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...
- [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]
之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读.如果说微软官方文档主要关于ASP ...
- 2018.09.14 bzoj2982: combination(Lucas定理)
传送门 貌似就是lucas的板子题啊. 练一练手感觉挺舒服的^_^ 代码: #include<bits/stdc++.h> #define mod 10007 #define ll lon ...
- it's time to change myself now (2018.10.31)
自16年从新屋熊职校毕业,入职深圳某厂从事云存储两年半了.两年半的时间很快,快的感觉一生都会飞快,两年多一直很忙,忙的几乎忘了自己是否正向改变过. 正向改变,or 积极改变,今年十一回家,与几个好友小 ...
随机推荐
- Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(二)
Terrain Streaming 可以用WorldCreator创建Tile地形,然后用WorldStreamer实现分块地图.比如10000*10000(16平方公里) 的地形,需要1000*10 ...
- TZOJ 3295 括号序列(区间DP)
描述 给定一串字符串,只由 “[”.“]” .“(”.“)”四个字符构成.现在让你尽量少的添加括号,得到一个规则的序列. 例如:“()”.“[]”.“(())”.“([])”.“()[]”.“()[( ...
- 自学之jQuery
最近在公司做项目的过程中,涉及到写前端部分,因为之前一直很少写前端,所以不是很熟悉,所以,在此写一下自学jQuery的过程,以及中途遇到的坑. 首先,要想使用jQuery必须先引入jQuery < ...
- swift - scrollview 判断左右移动, 以及上下两个view联动
核心代码 1. 2. 3. 界面代码VFL /* 浏览作品view*/ import UIKit /** * 图片浏览器(大图和缩略图) */ class JYBrowseWorksView: UIV ...
- Shell脚本break和continue命令
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用 break 和 continue 来跳出循环. break命令 允许跳出所有循环(终止执行后面的所有循环). continu ...
- URL编码表、Base64编码表、HTTP消息含义
URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5 tab 9% B 42% b 62% « %AB Ö %D6 linefeed %0A C 43% c 63% ...
- 关于vuex状态管理模式架构
一. 什么是vuex 集中存储管理所有组件的状态 并以相应的规则保证以一种可预测的方式发生变化. 例子: 实现加减 <p>{{count}} <button @click=" ...
- 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。
由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...
- Struts2把数据封装到集合中之封装到Collection中
数据封装到集合中,可以封装到集合中,也可以封装到Map中.该篇博客主要讲解数据封装到集合中的封装到Collection中. 1. 封装复杂类型的参数(集合类型 Collection .Map接口等) ...
- 15.Mysql中的安全问题
15.SQL中的安全问题15.1 SQL注入简介SQL是用来和数据库交互的文本语言.SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操 ...