题面

看了题解的推导发现其实并不复杂,但是如果你想要用多项式或者组合数求解的话,就GG了

其实如果把式子列出来的话,不需要怎么推导就能算出来,关键是要想到这个巧妙的式子。

设\(b_i=a_{i+1}-a_{i}(1\leq i\leq k-1)\)

答案就是

\[\sum_{b_1=1}^{m}\sum_{b_2=1}^{m}...\sum_{b_{k-1}=1}^{m}(n-\sum_{i=1}^{k-1}b_i)
\]

\[nm^{k-1}-\sum_{i=1}^{k-1}\sum_{b_1=1}^{m}\sum_{b_2=1}^{m}...\sum_{b_{k-1}=1}^{m}b_i
\]

\[nm^{k-1}-(k-1)m^{k-2}\sum_{i=1}^{m}i
\]

\[nm^{k-1}-(k-1)m^{k-2}\frac{m(m+1)}{2}
\]

然后直接算就可以了

这题的关键在于\((k-1)m<n\),它保证了\((n-\sum_{i=1}^{k-1}b_i)\)非负,这样就只需要对每一个序列\(\{b_i\}\)简单地累加贡献就可以了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,k,m,P;
ll p2(ll x){return x*x%P;}
ll pw(ll x,ll p)
{
return p?p2(pw(x,p/2))*(p&1?x:1)%P:1;
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&k,&m,&P);
n%=P;
if(k==1)return printf("%lld\n",n),0;
ll a=n*pw(m,k-1)%P;
ll b=m*(m+1)/2%P*(k-1)%P*pw(m,k-2)%P;
ll ans=(a-b+P)%P;
printf("%lld\n",ans);
return 0;
}

Luogu P3228 HNOI2013 数列 组合数学的更多相关文章

  1. [洛谷P3228] [HNOI2013]数列

    洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...

  2. [BZOJ3142][HNOI2013]数列(组合数学)

    3142: [Hnoi2013]数列 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1721  Solved: 854[Submit][Status][ ...

  3. 【BZOJ3142】[HNOI2013]数列(组合计数)

    [BZOJ3142][HNOI2013]数列(组合计数) 题面 BZOJ 洛谷 题解 唯一考虑的就是把一段值给分配给\(k-1\)天,假设这\(k-1\)天分配好了,第\(i\)天是\(a_i\),假 ...

  4. 【BZOJ3142】[HNOI2013]数列

    [BZOJ3142][HNOI2013]数列 题面 洛谷 bzoj 题解 设第\(i\)天的股价为\(a_i\),记差分数组\(c_i=a_{i+1}-a_i\) 则 \[ Ans=\sum_{c_1 ...

  5. BZOJ3142 HNOI2013数列(组合数学)

    考虑差分序列.每个差分序列的贡献是n-差分序列的和,即枚举首项.将式子拆开即可得到n*mk-1-Σi*cnt(i),cnt(i)为i在所有差分序列中的出现次数之和.显然每一个数出现次数是相同的,所以c ...

  6. BZOJ3142 [Hnoi2013]数列 【组合数学】

    题目链接 BZOJ3142 题解 题意:选一个正整数和\(K - 1\)个\([1,M]\)中的数,使得总和小于等于\(N\),求方案数模\(P\) 题目中\(K(M - 1) < N\)的限制 ...

  7. BZOJ3142 [Hnoi2013]数列

    Description 小 T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察 到:除第一天外每天的股价都 ...

  8. BZOJ 1500/Luogu 2042 - 维修数列 - [NOI2005][Splay]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1500 题目链接:https://www.luogu.org/problemnew/sho ...

  9. 「Luogu P2201」数列编辑器 解题报告

    数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我

随机推荐

  1. SQL --------------- order by 排序

    首先创建一个表弄点数据 order by 关键字用于排序查询 默认按照升序(asc)进行排列 降序要使用 desc排序方式:数字按照大小 英文字母和汉字按照第一个字母 从 a-z 排列语     法: ...

  2. 使用arcpy添加grb2数据到镶嵌数据集中

    #!coding: utf-8 import numpy as np import arcpy def addGRB2ToMosaic(grb2name): print "start add ...

  3. CyclicBarrier开启多个线程进行计算,最后统计计算结果

    有一个大小为50000的数组,要求开启5个线程分别计算10000个元素的和,然后累加得到总和 /** * 开启5个线程进行计算,最后所有的线程都计算完了再统计计算结果 */ public class ...

  4. Java 8创建Stream流的5种方法

    不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...

  5. angular 监听离开页面执行相关操作

    $scope.$on("$destroy", function() { //...})

  6. Bootstrap导航栏示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. mac pro使用2K(2056*1440)设置屏幕解决方法

    参考: https://www.jianshu.com/p/40cee8ab3d0f https://www.zhihu.com/question/35300978 在点击ok后,发现并不能保存.或者 ...

  8. ASP.NET Core IIS发布

    ASP.NET Core应用发布到IIS 官网教程地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?vi ...

  9. i春秋——“百度杯”CTF比赛 九月场——123(Apache解析pht,phtml,php3,phps等 php别名)

    网页源码提示用户信息在user.php中,直接访问是不会有显示的,于是查找相应的备份文件,vim交换文件等,最后发现/user.php.bak 用burp采用如下配置开始爆破 最后爆破出两个账号 登录 ...

  10. 生成Uuid工具类

    package com.freeter.util; import java.util.UUID; /** * @author liuqi * **/public class Uuid{ public ...