尝试用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 数列的更多相关文章

  1. 【HNOI2013】数列

    题面 题解 设\(\{a_n\}\)为差分数组,可以得到柿子: \[ \begin{aligned} ans &= \sum_{a_1 = 1} ^ m \sum_{a_2 = 1} ^ m ...

  2. 【BZOJ3142】[HNOI2013]数列(组合计数)

    [BZOJ3142][HNOI2013]数列(组合计数) 题面 BZOJ 洛谷 题解 唯一考虑的就是把一段值给分配给\(k-1\)天,假设这\(k-1\)天分配好了,第\(i\)天是\(a_i\),假 ...

  3. 【BZOJ3142】[HNOI2013]数列

    [BZOJ3142][HNOI2013]数列 题面 洛谷 bzoj 题解 设第\(i\)天的股价为\(a_i\),记差分数组\(c_i=a_{i+1}-a_i\) 则 \[ Ans=\sum_{c_1 ...

  4. [BZOJ3142][HNOI2013]数列(组合数学)

    3142: [Hnoi2013]数列 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1721  Solved: 854[Submit][Status][ ...

  5. BZOJ3142 [Hnoi2013]数列

    Description 小 T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察 到:除第一天外每天的股价都 ...

  6. bzoj千题计划293:bzoj3142: [Hnoi2013]数列

    http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i] ...

  7. BZOJ3142 HNOI2013数列(组合数学)

    考虑差分序列.每个差分序列的贡献是n-差分序列的和,即枚举首项.将式子拆开即可得到n*mk-1-Σi*cnt(i),cnt(i)为i在所有差分序列中的出现次数之和.显然每一个数出现次数是相同的,所以c ...

  8. BZOJ3142 [Hnoi2013]数列 【组合数学】

    题目链接 BZOJ3142 题解 题意:选一个正整数和\(K - 1\)个\([1,M]\)中的数,使得总和小于等于\(N\),求方案数模\(P\) 题目中\(K(M - 1) < N\)的限制 ...

  9. [BZOJ3142][HNOI2013]数列(组合)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3142 分析: 考虑差值序列a1,a2,...,ak-1 那么对于一个确定的差值序列,对 ...

随机推荐

  1. LINQ学习系列-----2.1 一个Linq语句

    Linq语句介绍 先上源码: 上述代码涵盖了Linq新特性: 代码解析: 针对本文中的几点特性,前面有文章进行阐述.

  2. win10下安装java jdk,tomcat

    1.安装java jdk 去官网下载java jdk(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

  3. linux运维、架构之路-Zabbix监控应用及分布式

    一.Zabbix监控集群应用 1.监控端口 net.tcp.listen[port] 检查 TCP 端口 是否处于侦听状态.返回 0 - 未侦听:1 - 正在侦听 net.tcp.port[<i ...

  4. liunx

    一键安装地址:https://lnmp.org/install.html

  5. JAVA IO分析一:File类、字节流、字符流、字节字符转换流

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  6. UWP 邮件反馈

    在我们构建App的时候,一个很人性化的设计就是增加邮件反馈渠道,就是让用户直接发邮件给你反馈. 当然,你也可以用系统自带的"反馈中心"(超级无敌难用,还经常打不开),或者使用商店的 ...

  7. python中字母与ascii码的相互转换

    在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...

  8. 室内地图1:从CAD到Map(画图,发布,路径导航)

    首先这个教程整理,比较偏细节. 因为我本身不是做GIS,所以可能有点流水账,当然错漏难免,恳请指正. 当我们做定位的时候,想要可视化展示,室外当然可以直接使用google,百度的底图.对于室内,有两种 ...

  9. windows 终端命令详解

    打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd ...

  10. EFCore2.0 Code First基本使用

    前言 在网上找EFCore Code First相关的文章,很多都是基于core 1.0版本的,觉得有必要自己实践下2.0.所以,撸起袖子干吧!~ 1.新建控制台项目(这里就不放图了) 2.打开程序包 ...