洛谷题目链接:[HNOI2013]数列

题目描述

小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨。股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N。在疯涨的K天中小T观察到:除第一天外每天的股价都比前一天高,且高出的价格(即当天的股价与前一天的股价之差)不会超过M,M为正整数。并且这些参数满足M(K-1)<N。小T忘记了这K天每天的具体股价了,他现在想知道这K天的股价有多少种可能

输入输出格式

输入格式:

只有一行用空格隔开的四个数:N、K、M、P。对P的说明参见后面”输出格式“中对P的解释。输入保证20%的数据M,N,K,P<=20000,保证100%的数据\(M,K,P<=10^9\) ,\(N<=10^{18}\) 。

输出格式:

仅包含一个数,表示这K天的股价的可能种数对于P的模值。【输入输出样例】

输入输出样例

输入样例#1:

7 3 2 997

输出样例#1:

16
【样例解释】
输出样例的16表示输入样例的股价有16种可能:
{1,2,3},{1,2,4},{1,3,4},{1,3,5}, {2,3,4},{2,3,5},{2,4,5},{2,4,6}, {3,4,5},{3,4,6},{3,5,6},{3,5,7},{4,5,6},{4,5,7},{4,6,7},{5,6,7}

(个人感觉这题比较神奇,是一道组合的好题)

题解: 直接考虑这个数列是比较麻烦的,但是题目给出了股票价值增长的范围,也就是说,我们可以针对每天股票的值讨论.我们设\(a_i\)表示第\(i\)天与第\(i+1\)天的价值变化,则任意\(a_i\)满足\(a_i\in[1,m]\).

答案可以表示为\(\sum_{所有合法的a数列}(n-\sum_{i=1}^{k-1}a_i)\),也就是说对应某种增长情况的数列有\(n-\sum_{i=1}^{k-1}a_i\)个.并且,题目保证\(m(k-1)<n\),也就是说,\[ans=m^{k-1}*(n-\sum_{i=1}^{k-1}a_i)\].
拆一下式子,则有\[ans=m^{k-1}*n-m^{k-1}*\sum_{i=1}^{k-1}a_i\]
再又因为在全排列中所有数字的出现次数都是相同的,也就是说\(1\)~\(m\)这\(m\)个数字总共出现了\(m^{k-1}*(k-1)\)次(因为\(a\)数列的长度是\(k-1\)),平均每个数字出现\(m^{k-2}*(k-1)\)次.也就是我们可以将式子写成这样的形式:\[ans=m^{k-1}*n-m^{k-2}*(k-1)*\sum_{i=1}^mi\].
式子后面半部分套等差数列求和公式:\[ans=m^{k-1}*n-m^{k-2}*(k-1)*\frac{m*(m-1)}{2}\].然后就可以快速幂直接求了.

这里有个坑点,就是\(n\)的值乘一个\(int\)范围的值可能会爆\(long \ long\),需要在输入之后就先取一次模.

#include<bits/stdc++.h>
using namespace std;
typedef int _int;
#define int long longint n, m, k, mod;int qpow(int x, int n){int res = 1;for(; n; x = x*x%mod, n >>= 1)if(n & 1) (res *= x) %= mod;return res;
}_int main(){cin >> n >> k >> m >> mod; n %= mod;cout << (qpow(m, k-1)*n%mod-qpow(m, k-2)*((m*(m+1)/2ll)%mod)%mod*(k-1)%mod+mod)%mod << endl;return 0;
}

转载于:https://www.cnblogs.com/BCOI/p/10371768.html

[洛谷P3228] [HNOI2013]数列相关推荐

  1. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  2. YBTOJ洛谷P2042:维护数列(平衡树)

    文章目录 题目描述 解析 删除区间 插入数列 修改&翻转 区间和&最大子段和 代码 传送门 题目描述 解析 阴间题- 这不是裸的板子吗? 国赛真的有人能把这题写出来吗- 应该算一道练习 ...

  3. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

  4. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  5. [洛谷P1438] 无聊的数列

    洛谷题目链接:无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i] ...

  6. 洛谷 P1356 数列的整除性

    [题目链接] 洛谷 P1356 数列的整除性 [题目考点] 1. 动态规划:线性动规 [解题思路] 本题与该题几乎是同一个问题: 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 ...

  7. 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列

    [题目链接] ybt 1937:[06NOIP普及组]数列 洛谷 P1062 [NOIP2006 普及组] 数列 [题目考点] 1. 数制 [解题思路] 如果k为2,那么这个数列 第1项为202^02 ...

  8. 二分答案——数列分段 Section II(洛谷 P1182)

    题目选自洛谷P1182 本题解法:二分答案+贪心 思路:首先,分析题目,求最大值的最小化,直接联想到二分,So我们直接二分答案,关键是要怎么去高效的check,我们考虑一个贪心的思路,能加的就加上,不 ...

  9. [HNOI2013]数列(差分)

    [HNOI2013]数列 problem 洛谷链接 solution 假设每天的股价为 a[i]a[i]a[i].则需满足 ∀i<ka[i+1]−a[i]≤m\forall_{i<k}a[ ...

最新文章

  1. 如何为linux服务器配置DNS解析?
  2. 计算机专业课 复习,计算机专业课复习经验:各个突破、全面掌握
  3. 径向基函数插值(1)
  4. oracle修改删除数据,[Oracle 错误修改删除数据后的恢复方法
  5. MySQL常用运算符详解
  6. Jenkins + Pipeline 构建流水线发布
  7. placeholder的兼容处理方法
  8. 线性代数拾遗(六):特征值与特征向量
  9. lock mysql unlock_MySql中Lock命令和unlock命令
  10. python如何制作登录密码_python实战系列之模拟用户密码登陆系统(一)
  11. Linux修改history存储的最大记录数
  12. WPF事件,路由事件
  13. 10个常见的Redis面试刁难问题
  14. 计算机绘图课程选用课本,机械制图课程学习指南
  15. abap 日期格式转换
  16. U盘修复,写保护,这个必须推荐!安国(Alcor)AU6983 4G U盘写保护修复记
  17. 如何将硬盘克隆到固态硬盘,固态硬盘系统克隆怎么弄
  18. 云数智驱动数据高速增长,浪潮存储提供EB级容量扩展
  19. php yar 安装失败_php 安装yar扩展
  20. Windows自带MD5 SHA1 SHA256命令行工具

热门文章

  1. JavaScript汉字Unicode编码相互转换
  2. 程序员新年要实现的10个愿望
  3. C语言实现一维多项式求值
  4. C++学习笔记(11) 重载流插入运算符和流提取运算符,以及自动类型转换
  5. mysql的未提示输入密码
  6. np.where使用:根据条件生成新的数组
  7. matlab回归分析sst_R语言 | 回归分析(一)
  8. 阅读软件怎么添加书源_相册视频制作软件怎么用?怎么添加滤镜?
  9. Triumph X发布著名摄影师Kim Joong-man首个NFT系列
  10. Robinhood CEO 呼吁证券行业通过创新实现实时结算