【BZOJ】3142: [Hnoi2013]数列
2017-02-16 21:50
323 查看
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3142
12年也有一个组合数学。。。(这几年的画风啊....
考虑直接去做:DP? DP+容斥? 。。。。NAIVE!
设${a[i]}$表示第${i}$和第${i-1}$天股价差值。
那么对于任意一个可能$a$数组,它对答案的贡献为:${n-\sum a[i]}$
${ANS=数组A的个数*n-\sum a[i]}$
考虑这样的$a$数组可能有多少个?应该是:${m^{k-1}}$个,这样就计算完了减号左边。
考虑计算减号右边,其实相当于所有$a$数组中一共有${m^{k-1}*(k-1)}$个数字。
每一个${a[i]\in[1,m]}$,值域范围内的数字出现次数也应该一样。
每一个在${[l,r]}$的数字就出现了${m^{k-1}*(k-2)}$次。
在套一个等差数列求和公式${m^{k-1}*(k-2)*m(m+1)/2}$
最终:
$${ANS=n*m^{k-1}-m^{k-2}*(k-1)*m(m+1)/2}$$
套一个快速幂即可。
12年也有一个组合数学。。。(这几年的画风啊....
考虑直接去做:DP? DP+容斥? 。。。。NAIVE!
设${a[i]}$表示第${i}$和第${i-1}$天股价差值。
那么对于任意一个可能$a$数组,它对答案的贡献为:${n-\sum a[i]}$
${ANS=数组A的个数*n-\sum a[i]}$
考虑这样的$a$数组可能有多少个?应该是:${m^{k-1}}$个,这样就计算完了减号左边。
考虑计算减号右边,其实相当于所有$a$数组中一共有${m^{k-1}*(k-1)}$个数字。
每一个${a[i]\in[1,m]}$,值域范围内的数字出现次数也应该一样。
每一个在${[l,r]}$的数字就出现了${m^{k-1}*(k-2)}$次。
在套一个等差数列求和公式${m^{k-1}*(k-2)*m(m+1)/2}$
最终:
$${ANS=n*m^{k-1}-m^{k-2}*(k-1)*m(m+1)/2}$$
套一个快速幂即可。
#include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<cstdlib> #include<cmath> #include<cstring> using namespace std; #define maxn 10010 #define llg long long #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); llg n,m,k,p,ans; llg ksm(llg a,llg b,llg md) { if (b==0) return 1; llg mi=1; a%=md; while (b!=0) { if (b&1) mi*=a,mi%=md; a*=a; a%=md; b/=2; } return mi; } int main() { yyj("math"); cin>>n>>k>>m>>p; n%=p; ans=ksm(m,k-1,p)*(n % p); ans%=p; ans-=((ksm(m,k-2,p)*(k-1)) % p)*(((m*m+m)/2) % p); ans%=p; while (ans<0) ans+=p; cout<<ans; return 0; }
相关文章推荐
- BZOJ3142 [Hnoi2013]数列 (组合数学)
- 【bzoj3142】[Hnoi2013]数列 数学
- BZOJ3142 [Hnoi2013]数列
- BZOJ3142 HNOI2013数列(组合数学)
- 【bzoj 3142】: [Hnoi2013]数列
- BZOJ3142: [Hnoi2013]数列
- [数学] BZOJ3142 [Hnoi2013]数列
- 【BZOJ3142】[Hnoi2013]数列【组合数学】
- 【bzoj3142】[Hnoi2013]数列
- [BZOJ3142][HNOI2013]数列
- BZOJ 3142: [Hnoi2013]数列
- bzoj 3142: [Hnoi2013]数列 组合
- bzoj 3142: [Hnoi2013]数列 数学
- [BZOJ3142][HNOI2013]数列-快速幂-数学
- bzoj3142 [Hnoi2013]数列
- bzoj 3142: [Hnoi2013]数列
- HNOI2013 BZOJ3142 数列
- [BZOJ3142][Hnoi2013]数列(数学相关)
- [BZOJ3142][Hnoi2013]数列(差分+计数)
- 数列 [Bzoj3142,Codevs2089,HNOI2013]