bzoj3142: [Hnoi2013]数列
来源:互联网 发布:网络优化工程师好学吗 编辑:程序博客网 时间:2024/04/28 11:00
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3142
思路:首先我们假设初值固定,无视上限,那么我们就可以看成是走K-1步,每步有M种走法
那方案数就是M^(k-1)
但是初值不固定,枚举是不现实的,因为如果起点较为靠后,我们就不能无视上限,方案是无法统计的
但这给我们一个启示,走的每步不就是差分数组吗
于是我们可以考虑对于一个差分数组a[i],它对答案有多少贡献
我们可以靠移动首位来得到不同方案
就是n-Σa[i]
那么总方案就是
ΣΣΣ....Σ(n-a[1]-a[2]-....-a[K-1])
提出n
M^(K-1)*n-ΣΣΣ....Σ(a[1]+a[2]+....+a[K-1])
对于右边的部分
统计一位的值,我们可以取(1->M),然后我们有(K-1)个不同的位置,固定后仍有(K-2)个位置可取(1-M)的任意值,于是有
M^(K-2)的方案
于是可化为(1+2+3+.....+m)*(K-1)*M^(K-2),即(M*(M+1)/2)*(K-1)*M^(K-2)
答案就是M^(K-1)*n-(M*(M+1)/2)*(K-1)*M^(K-2)
#include<cstdio>using namespace std;typedef long long ll;ll n,k,m,mod;ll mypw(ll a,ll b){ll res=1,j=a;for (;b;b>>=1,j=j*j%mod) if (b&1) res=res*j%mod;return res;}int main(){scanf("%lld%lld%lld%lld",&n,&k,&m,&mod);ll ans1=mypw(m,k-2),ans2=ans1*m%mod;if (k==1) return printf("%lld\n",n%mod),0;printf("%lld\n",(n%mod*ans2%mod-m*(m+1)/2%mod*ans1%mod*(k-1)%mod+mod)%mod);return 0;}
0 0
- 【组合】Bzoj3142 数列[HNOI2013]
- bzoj3142: [Hnoi2013]数列
- 【bzoj3142】【HNOI2013】【数列】【数学】
- [数学] BZOJ3142 [Hnoi2013]数列
- [bzoj3142][HNOI2013]数列
- [BZOJ3142][HNOI2013]数列
- 数列 [Bzoj3142,Codevs2089,HNOI2013]
- BZOJ3142 [Hnoi2013]数列
- BZOJ3142: [Hnoi2013]数列
- 【bzoj3142】[Hnoi2013]数列
- 【bzoj3142】[Hnoi2013]数列
- 【BZOJ3142】[Hnoi2013]数列【组合数学】
- BZOJ3142 [Hnoi2013]数列 (组合数学)
- [BZOJ3142][Hnoi2013]数列(数学相关)
- HNOI2013 数列
- 【HNOI2013】数列
- 【bzoj 3142】: [Hnoi2013]数列
- [Hnoi2013]数列 (计数)
- file转换成bytes
- 文件拷贝的实现
- [maven+javancss] Can't process temp ncss xml file.
- (java集合原理)--01 HashMap的实现原理
- **Eclipse Access Restriction**
- bzoj3142: [Hnoi2013]数列
- Socket 深度探索 4 PHP (一)
- UVA 10340(难懂的题意+思维)
- [转载]IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- Android应用ViewDragHelper详解及部分源码浅析
- 浅谈现在的社区o2o超市怎么样呢?
- java.lang.OutOfMemoryError: PermGen space
- AndroidTestCase来进行android 单元测试简介
- caffe神经网络框架的辅助工具(将图片转换为leveldb格式)