尝试用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. TFboy养成记 MNIST Classification (主要是如何计算accuracy)

    参考:莫烦. 主要是运用的MLP.另外这里用到的是批训练: 这个代码很简单,跟上次的基本没有什么区别. 这里的lossfunction用到的是是交叉熵cross_entropy.可能网上很多形式跟这里 ...

  2. 2964:日历问题-poj

    2964:日历问题 总时间限制:  1000ms 内存限制:  65536kB 描述 在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰 ...

  3. 在centos上搭建SVN服务器和MySQL

    ----------搭建MySQL--------------- 1.查看yum库中的mysql yum list | grep mysql //查看yum库中的mysql 2.选择需要的mysql进 ...

  4. Python入门 - 容器类型

    python的容器有四种:列表List,元祖Tuple,字典Dictionary和集合Set. 一.列表List a = [1, 2, 3, 'a', 'b', 'c'] b = 1.5 a.appe ...

  5. vue.js官方文档 PDF

    链接:https://pan.baidu.com/s/1jHMBb5W 密码:gsks

  6. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十一)redis密码设置、安全设置

    警惕 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作>主要是一个简单的介绍,针对redis ...

  7. .net程序员做的第一个安卓APP

    我从毕业之后一直做的是ASP.NET,从毕业到现在都已经五六个年头了.一个事物接触久了就会慢慢没有了新鲜感热情也褪去的差不多了,我又是对新事物比较感兴趣的,虽说Android早就不算什么新事物,当对于 ...

  8. canvas入门之时钟的实现

    canvas 入门之作: 三步实现一个时钟: 直接上效果:   step 1  : 背景制作首先制作从1-12的数字: var canvas = document.getElementById('ca ...

  9. Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页

    前言: 开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置 第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味. ...

  10. DOM操作整理

    DOM获取 1. 直接获取 document.getElementById("box_id") 通过ID获取 document.getElementsByName("my ...