bzoj3142 luogu3228 HNOI2013 数列
这题好没意思啊,怀疑拉不开区分度。
题意:求一个递增序列,每两个相邻数字之间的差值不超过m,最后一个值不能大于n。
分析:网上好多人用了差分,我没想到。然后YY了一发生成函数。
考虑构造生成函数G(x) = x+x2+...+xm.
我们的目标是求这个G(k-1)(x)的很多个前缀和。
具体来说是求什么呢?
这题的重点其实在于一个注意不到的细节:(k-1)*m<n。
这意味着,当第一项为1时,所有的答案一定被满足。
也就是说,当第一项为1时,对应的答案是G(k-1)(x)的所有项数之和。
实际上通过举例子,你会发现这样一个性质:[xi+k-1]G(k-1)(x) = [x(k-1)*m-i]G(k-1)(x) 其中i的范围自己想一下。
这个性质怎么证明呢:归纳
考虑将Gi(x)除以xi,然后乘以G(x)/x,然后把除的东西乘上。由于上一个具有这样的对称性,画图之后我们发现乘的时候是对称的,那么这个性质仍然满足。
通过我们对高斯的了解,我们知道他10岁的时候想到了1加到100的方法,他非常聪明,而我们只能照葫芦画瓢。
什么意思呢,我们考虑第一项为i的时候,在某个位置的时候出现了第一个不满足的序列。
然后从后往前,在某个位置出现了第一个满足的序列。
把两个匹配在一起,这样子我们得到了一个完整的序列,即(m)^(k-1).
众所周知,高斯是个很聪明的孩子,那么他用的方法很可能是将1到100翻倍然后两两配对,最后除以2。这个方法在这不好用。
我们不容易确认2在这个模数下有逆。
取而代之的方法是用类似1配99,2配98的方法。考虑多了一项怎么办。
不难发现的是,多出来的一项一定是配出来的结果的一半,不说明了。
做这个答案的时候一定要先留下一个m,将这个m除以2再乘进去。
代码:
#include<bits/stdc++.h>
using namespace std; typedef long long ll; ll n,k,m,mod;
ll pw,maxx; ll fast_pow(int now,int p){
if(p == ) return ;
if(p == ) return now;
ll z = fast_pow(now,p/);
z *= z; z %= mod;
if(p & ) z*=now,z%=mod;
return z;
} int main(){
scanf("%lld%lld%lld%lld",&n,&k,&m,&mod);
maxx = (k-)*m;
if(k == ){printf("%lld",n);return;}
pw = fast_pow(m,k-);
ll fir = n-maxx+; // diyige youxiaci de
ll lst = n-(k-); // zuihouyige youxiacide
ll len = lst-fir+,multi = len/;
ll ans = ((multi+n-maxx)%mod)*pw; ans %= mod;
if(len & ){
pw = fast_pow(m,k-);
pw *= (m/);pw %= mod;
ans += pw;ans %= mod;\
}
printf("%lld",ans);
return ;
}
bzoj3142 luogu3228 HNOI2013 数列的更多相关文章
- 【BZOJ3142】[HNOI2013]数列(组合计数)
[BZOJ3142][HNOI2013]数列(组合计数) 题面 BZOJ 洛谷 题解 唯一考虑的就是把一段值给分配给\(k-1\)天,假设这\(k-1\)天分配好了,第\(i\)天是\(a_i\),假 ...
- 【BZOJ3142】[HNOI2013]数列
[BZOJ3142][HNOI2013]数列 题面 洛谷 bzoj 题解 设第\(i\)天的股价为\(a_i\),记差分数组\(c_i=a_{i+1}-a_i\) 则 \[ Ans=\sum_{c_1 ...
- 【bzoj3142】[Hnoi2013]数列 数学
题目描述 求满足 $1\le a_i\le n\ ,\ 1\le a_{i+1}-a_i\le m$ 的序列 $a_1...a_k$ 的个数模 $p$ 的值. 输入 只有一行用空格隔开的四个数:N.K ...
- [BZOJ3142][HNOI2013]数列(组合数学)
3142: [Hnoi2013]数列 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1721 Solved: 854[Submit][Status][ ...
- [洛谷P3228] [HNOI2013]数列
洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...
- BZOJ3142 [Hnoi2013]数列
Description 小 T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察 到:除第一天外每天的股价都 ...
- bzoj千题计划293:bzoj3142: [Hnoi2013]数列
http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i] ...
- BZOJ3142 HNOI2013数列(组合数学)
考虑差分序列.每个差分序列的贡献是n-差分序列的和,即枚举首项.将式子拆开即可得到n*mk-1-Σi*cnt(i),cnt(i)为i在所有差分序列中的出现次数之和.显然每一个数出现次数是相同的,所以c ...
- BZOJ3142 [Hnoi2013]数列 【组合数学】
题目链接 BZOJ3142 题解 题意:选一个正整数和\(K - 1\)个\([1,M]\)中的数,使得总和小于等于\(N\),求方案数模\(P\) 题目中\(K(M - 1) < N\)的限制 ...
随机推荐
- 在web工程中设置首页的页面
有些时候删除了系统自带的index.jsp删除后会出现如下图错误 解决办法,新创建一个以你自己命名的jsp文件,然后在对该web工程的WEB-INF 目录下的web.xml进行添加加上下面的注释所带的 ...
- 深入研究Sphinx的底层原理和高级使用
深入研究Sphinx的底层原理和高级使用
- Docker安装weblogic
Docker容器安装weblogic详细教程 前提:已经安装后Docker,并且能正常使用 (1)获取镜像: docker pull ismaleiva90/weblogic12 docker pu ...
- Jenkins系列——使用checkstyle进行代码规范检查【升级版】
1.背景 在<Jenkins系列——使用checkstyle进行代码规范检查>一文中完成了ant实现代码规范检查的例子.但存在以下缺陷: 每个作业都需要配置一个不同的checkstyle ...
- Linux shell的问题
1.uptime命令可以查看当前系统的启动时间: w命令显示当前登录者top命令显示当前任务ps命令显示所有进程信息 uptime命令可以查看系统启动时间 2.使用shell时,默认的环境变量放在 ...
- 【前端】Vue和Vux开发WebApp日志一、整合vue+cordova和webpack+gulp
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux.html 项目github地址:https://github.com/shamoyuu/vue-vu ...
- Android okHttp网络请求库详解
okhttp 是一个 Java 的 HTTP+SPDY 客户端开发包,同时也支持 Android.需要Android 2.3以上. 特点 OKHttp是Android版Http客户端.非常高效,支持S ...
- FusionCharts封装-单系列图组合
ChartAction.java: /** * @Title:ChartAction.java * @Package:com.fusionchart.action * @Description:单系列 ...
- 利用ffmpeg将H264流 解码为RGB
利用H264解码分为几个步骤: 注意一点在添加头文件的时候要添加extern "C",不然会出现错误 [cpp] view plaincopy extern "C&quo ...
- WebService之CXF注解之五(配置文件)
1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...