尝试用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. 记录项目版本升级angular4 ~ angular5

    前言: 在上一篇ng4文章<angular4--实际项目搭建总结>中说过,等到ng5正式发布,并且蚂蚁的NG ZORRO兼容ng5之后,我会对ng4项目进行升级.这篇文章就是大概说下升级的 ...

  2. MVC Code First(数据模型实例讲解)

    首先配置好web.config <connectionStrings> <add name="BookDbContext" connectionString=&q ...

  3. python语言 第一个程序

    print("hello word!") # for i in range(1, 10):# for j in range(1, 10):# print(j, "x&qu ...

  4. CCF考试认证模拟练习——数字排序

    #include<iostream>#include<algorithm>using namespace std;struct node //定义结构体{ int num;// ...

  5. java版Web Socket,实现消息推送

    # web socket是什么? WebSocket协议是基于TCP的一种新的网络协议. 它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动发送信息给客户端. ## 用途 实时 ...

  6. ThinkPHP中对系统常量的使用

    /Wen 当前模块的URL地址 /Wen/postname 当前操作的URL地址 /thinkphp-changliang/ 当前URL地址 APP_DEBUG 是否开启调试模式(框架两种模式:[默认 ...

  7. 分布式版本控制系统 Git 教程

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  8. tomcat警告setting property 'debug' to '0' did not find a matching property

    在使用tomcat6.0版本结合myeclipse进行java web项目,运行程序显示setting property 'debug' to '0' did not find a matching ...

  9. HDU5804--Price List

    Price List Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Tot ...

  10. POJ3624--01背包

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34013   Accepted: 15087 ...