【洛谷P3228】数列
题目
题目链接:https://www.luogu.com.cn/problem/P3228
小 T 最近在学着买股票,他得到内部消息:F 公司的股票将会疯涨。股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为 。在疯涨的 天中小 T 观察到:除第一天外每天的股价都比前一天高,且高出的价格(即当天的股价与前一天的股价之差)不会超过 , 为正整数。并且这些参数满足 。小 T 忘记了这 天每天的具体股价了,他现在想知道这 天的股价有多少种可能。
。
思路
不难想到把每天的股价差分一下。那么现在问题转化为对于一个长度为 的序列 ,且 的每一个元素都不超过 ,它的贡献是 。求所有满足要求的序列的贡献之和。
显然差分序列一共有 种。记 为第 种差分序列的第 个元素。那么答案即为
考虑减号后面一部分。也就是所有差分序列的所有元素和。
可以发现每一个 间的数字的出现次数都是一样的。因为对于两个数字 ,我们把所有差分序列中 和 的位置交换,那么这 个差分序列必然和没有交换前的一致。
由于所有数字出现次数之和为 ,所以每一个数字的出现次数就为 。所以答案就是
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,k,p;
ll fpow(ll x,ll k)
{
ll ans=1;
for (;k;k>>=1,x=x*x%p)
if (k&1) ans=ans*x%p;
return ans;
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&k,&m,&p);
printf("%lld",(n%p*fpow(m,k-1)%p-fpow(m,k-2)*(k-1)%p*((1+m)*m/2%p)%p+p)%p);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
2020-06-10 【POJ2942】Knights of the Round Table