1425: 数列(seq)

本文介绍了一种预测股票价格疯涨期间可能走势的算法。通过分析K天内股票价格变化趋势,确保每天股价上涨不超过M的情况下,计算出可能的股价组合数量。利用数列贡献原理,最终得出公式计算答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

题解

答案即为差值为k−1k-1k1个数,每个数在1−m1-m1m的范围内的每个数列的贡献
对于一个数列,它的贡献为n−∑ain-\sum a_inai
考虑到一个数列,必然存在另一个数列,其每一位相加都为m+1m+1m+1
所以两两配对起来,又因为一共有mk−1m^{k-1}mk1种数列,所以答案为:
mk−1∗(n−(m+1)∗(k−1)2)m^{k-1}*(n-\frac{(m+1)*(k-1)}{2})mk1(n2(m+1)(k1))

#include <cstdio>
#define LL long long
LL n,k,m,p;
LL K(LL x,LL y){
    LL A=1;while(y){
        if (y&1) A=A*x%p;
        x=x*x%p;y>>=1;
    }return A;
}
int main(){
    scanf("%lld%lld%lld%lld",&n,&k,&m,&p);
    printf("%lld\n",(n%p*K(m,k-1)%p-(m*(m+1)/2)%p*(k-1)%p*K(m,k-2)%p+p)%p);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值