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 那么对于一个确定的差值序列,对 ...
随机推荐
- 正则化方法:L1和L2 regularization、数据集扩增、dropout(转)
ps:转的.当时主要是看到一个问题是L1 L2之间有何区别,当时对l1与l2的概念有些忘了,就百度了一下.看完这篇文章,看到那个对W减小,网络结构变得不那么复杂的解释之后,满脑子的6666------ ...
- Android开发之漫漫长途 Ⅵ——图解Android事件分发机制(深入底层源码)
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Geth控制台使用及Web3.js使用实战
在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3. Geth 控制台(REPL)实现了所有的web3 API及Admin API, 使用好 Geth 就是必修课.结合Geth命令用 ...
- Mysql--触发器的操作
1.为什么使用触发器 2.创建触发器 2.1 创建有一条执行语句的触发器 例子:在数据库company中存在两个表对象:部门表(t_dept)和日记表(t_diary),创建触发器实现向部门表中插入记 ...
- 深入理解php底层:php生命周期
1.PHP的运行模式: PHP两种运行模式是WEB模式.CLI模式.无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行. 1.当我们在终端敲入php这个命令的时候,它使用的是CLI. 它就像 ...
- JavaScript学习笔记(十六)——面向对象编程
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- C# TreeView设置SelectedNode设置无效的问题
在设置Treeview.SelectedNode = newTreeNode(找到的TreeNode)时,界面上没呈现选择状态. 此时可能是treeview没有获取焦点,但是即使没有焦点,也可以让选中 ...
- Oracle基础知识整理
Oracle以dba身份登陆 sqlplus / as sysdba; 表空间操作 创建用户以及授权操作 --创建表 create table teacher ( tNo number(4) no ...
- 【NOIP2014提高组】联合权值
https://www.luogu.org/problem/show?pid=1351 既然是一棵树,就先转化成有根树.有根树上距离为2的点对,路径可能长下面这样: 枚举路径上的中间点X. 第一种情况 ...
- 如何在Raspberry Pi 3B中安装RASPBIAN
RASPBIAN简介 RASPBIAN是树莓派官方支持的基于Debian的Linux系统.RASPBIAN预装了很多常用的组件,使用起来十分方便. 官方有RASPBIAN STRETCH WITH D ...