[jzoj]4086. 选数(number)(容斥+DP优化)
来源:互联网 发布:编程猫 李天驰 编辑:程序博客网 时间:2024/05/23 13:13
https://jzoj.net/senior/#contest/show/2088/0
Problem
给定一个范围
Data constraint
100%
Solution
这是一道非常经典的题目.
我们注意到方案数是排列而并非组合.
那么一个显然的结论:
如果我在
我们再设
显然有:
那么这个转移是很显然的,但是时间不允许..
我们考虑优化.
优化往往是针对数据的,注意到这题的一个限定性条件“R-L<=10^5”
N=5,K=2,L=80,R=100
如果计算
但我们发下,
所以
那么显然这一步是很繁琐的.
转化一下状态?
因为我们发现当只选一个数时的方案针对数据来说,太多了!
那我就设成
那么每次我可以把那一串对答案贡献为1的直接减掉.
也就是减去一个
把那些只选一个数然后能构成最大公因子是
这样子,因为我们很简单的可以证明,任选两个数的
我们再用
这样就可以在
减少一些mod操作速度可以更快.
#include <cstdio>#define ll long long#define maxn 200010#define mo 1000000007using namespace std;ll n,K,l,r,ans,g[maxn];ll ksm(ll x,ll y){ ll ans=1; while (y>0) { if ((y&1)==1) ans=(ans*x)%mo; x=(x*x)%mo; y=y>>1; } return ans;}int main(){ freopen("number.in","r",stdin); freopen("number.out","w",stdout); scanf("%lld%lld%lld%lld",&n,&K,&l,&r); ll i,j,len=(r-l)/K+1; for (i=len;i>=1;i--) { g[i]=((r/(i*K))-((l-1)/(i*K))); g[i]=ksm(g[i],n)-g[i]; for (j=i*2;j<=len;j+=i) //注意这里是j+=i g[i]-=g[j]; g[i]=g[i]%mo; } if ((l<=K)&&(r>=K)) g[1]++; printf("%lld",(g[1]+mo)%mo);}
阅读全文
1 0
- [jzoj]4086. 选数(number)(容斥+DP优化)
- smoj2075:匹配数(状压dp/广义容斥原理)
- [容斥][dp][卡特兰数]登山
- [jzoj]1229. Hanoi(DP决策最优性优化)
- Number (dp-性质数状态表示)
- 【CF 140E】New Year Garland(第二类斯特林(Stirling)数+DP+容斥)
- bzoj 3294: [Cqoi2011]放棋子 (容斥原理+组合数+DP)
- 玲珑oj 1032 (容斥原理或前缀和优化dp)
- [BZOJ4818][Sdoi2017][容斥原理][矩阵优化DP]序列计数
- [BZOJ3930][CQOI2015]选数(数论+容斥)
- HDU_5794_ASimpleChess(Lucas定理&&(容斥||dp))
- 数字 【DP+容斥】
- bzoj1042 dp+容斥
- 【bzoj3930】【SCOI2015】【选数】【容斥】
- 找数(线筛,容斥)
- 丑数(humble number) hdu 1058 DP
- jzoj 1521. 【普及模拟】好数 数位dp
- ZOJ 3690 Choosing number(dp矩阵优化)
- H5面试题---如何阻止事件冒泡和默认事件
- C-C++面试知识点总结(三)
- HDU 6085 Rikka with Candies(2017多校第五场)bitset枚举
- HDU 2448 Mining Station on the Sea(最小费用最大流, KM算法)
- opencv 截图并保存
- [jzoj]4086. 选数(number)(容斥+DP优化)
- 直接插入排序
- 20170814阿里测验题
- ESP8266 SDK开发篇(五)——GPIO
- 【C语言】【unix c】如何察看bash下的环境变量
- 关于进程间通信杂谈
- 一个简单class
- 【二分图匹配入门专题1】O
- 《大逃杀》人物关系图