HNOI2013 BZOJ3142 数列
尝试用Markdown写一篇博客
3142: [Hnoi2013]数列
Description
小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨。股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N。在疯涨的K天中小T观察到:除第一天外每天的股价都比前一天高,且高出的价格(即当天的股价与前一天的股价之差)不会超过M,M为正整数。并且这些参数满足M(K-1)<N。
小T忘记了这K天每天的具体股价了,他现在想知道这K天的股价有多少种可能。
Input
只有一行用空格隔开的四个数:N、K、M、P。对P的说明参见后面“输出格式”中对P的解释。
输入保证20%的数据M,N,K,P≤20000,保证100%的数据M,K,P≤109,N≤1018 。
Output
仅包含一个数,表示这K天的股价的可能种数对于P的模值。
Sample Input
7 3 2 997
Sample Output
16
首先来讲讲我是怎么做(鬼)出这道题的。
没错就是打表。
对上次考试打完表没看出1,2,6,24是阶乘的事情耿耿于怀的我决定用打表做出这道一看就是打表题的题。
首先我花了20分钟碌碌无为,对于答案f(n,k,m)打了一个小表,什么都没有发现。
20分钟左右我开始固定k和m,移动n。
实验了几组k在2~4的数据后发现从n到n+1,答案会增长m^(k-1)。
试到30分钟,总结出:规律是在n=m(k-1)处开始的。
对!因为题目保证了n>m(k-1),所以这个规律可以放心大胆用。###
然后我打了关于k,m的f(m*(k-1),k,m)的表,即临界表。
大概长这个样子:
k\m 2 3 4 5
2 1 3 6 10
3 4 18 48 100
4 12 81 288 750
5 32 324 1536 5000
第一眼看过去没什么规律?
乱搞到40分钟,发现第k行的都能被(k-1)整除,除掉再看:
k\m 2 3 4 5
2 1 3 6 10
3 2 9 24 50
4 4 27 96 250
5 8 81 384 1250
发现每一列下来都是乘以m?所以只要看第一列。
m 2 3 4 5
1 3 6 10
相差是个等差数列,那就是个二次多项式了。
这时规律就比较明显了:(m-1)*m/2。
然后再整理一下就会得到答案:
Ans=(k-1)×(m-1)×m/2×m(k-2)+[n-m(k-1)]×m(k-1)####
50分钟不到开打,一个小时不到就做完了。
放在省选里面这个时间是可以接受的(NOIPT2也是1h左右吧?)。
这个时候我们不能满足是吧?要知道正解是什么。
第一步:将原数组差分,得到k-1个[1,m]内的正整数a[1…k-1]。
第二步:当前方案数即为n-sum(a[1] to a[k-1])。
所以总的方案数就是sum(n-sum(a[1] to a[k-1]))。
把n提出来,为n×m^(k-1)。
然后后面那个东西,网上的理解我推不出来,是要对于每个东西单独考虑?不会。
HNOI2013 BZOJ3142 数列的更多相关文章
- 【HNOI2013】数列
题面 题解 设\(\{a_n\}\)为差分数组,可以得到柿子: \[ \begin{aligned} ans &= \sum_{a_1 = 1} ^ m \sum_{a_2 = 1} ^ m ...
- 【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]数列(组合数学)
3142: [Hnoi2013]数列 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1721 Solved: 854[Submit][Status][ ...
- 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\)的限制 ...
- [BZOJ3142][HNOI2013]数列(组合)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3142 分析: 考虑差值序列a1,a2,...,ak-1 那么对于一个确定的差值序列,对 ...
随机推荐
- 运行java web项目时报错:Several ports (8005, 8080, 8009) required
运行java web项目时报错:Several ports (8005, 8080, 8009) required 如下图 之所以报上面的错误是因为安装Tomcat的时候,已经把端口8005,8080 ...
- 常用的redis命令
常用的redis命令 http://www.runoob.com/redis/redis-tutorial.html 菜鸟教程 Cmd连接有密码的redis:$ redis-cli -h ho ...
- Activity 的 4 种加载模式
Activity 的 4 种加载模式 配置 Activity 时可指定 android:launchMode 属性,该属性用于配置该 Activity 的加载模式.该属性支持如下 4 个属性值. * ...
- 【ASP.NET Core】运行原理之启动WebHost
ASP.NET Core运行原理之启动WebHost 本节将分析WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build ...
- Python入门 - 时间处理
本讲主要介绍python时间处理方式,比如获取当前的时间: import time ftime = time.strftime("%Y年%m月%d日%H点%M分%S秒", time ...
- 分布式监控系统Zabbix3.2给异常添加邮件报警
在前一篇 分布式监控系统Zabbix3.2跳坑指南 中已安装好服务端和客户端,此处客户端是被监控的服务器,可能有上百台服务器.监控的目的一个是可以查看历史状态,可以对比零晨和工作区间数据的对比,以便后 ...
- J2SE-反射
目录 1 什么是反射?主要提供了哪些功能? 2 如何通过反射获取类的信息? 3 数组的特殊处理. 4 反射的应用场景. 5 其他. 正文 1 什么是反射?主要提供了哪些功能? 1) Java的反射机制 ...
- memcache调整value大小限制
> *事件背景: 当Redis有问题时按预案就会切换到本机memcache,但是我们首页 key:value现 在是1.5M同时memcache item限制是1M,导致首页写入memcache ...
- cookie和session有什么区别,请你谈谈cookie的缺点
1.区别: cookie机制采用的是在客户端保持状态的方案 session机制采用的是在服务端保持状态的方案 2.cookie: 优点: 1> 极高的扩展性和可用性 2> 通过编程方式,控 ...
- 获取串口映射的COM端口号
背景:近期由于项目需要,需要操作短信猫,当短信猫插入电脑后,会根据当前PC状况,映射COM口,这里需动态获取短信猫映射的COM端口号. 编程语言C#: 具体代码如下 public enum Hardw ...