loj2143组合题解

embedded/2024/10/18 6:02:06/
组合

∑ i = 0 ∞ C n k i k + r \sum_{i=0}^{\infty} C_{n k}^{i k+r} i=0Cnkik+r p p p 的值。


这道题题目非常的善良,直接把式子送给我们了,那我们直接开始推式子:
∑ i = 0 ∞ C n k i k + r = ∑ i = 0 ∞ ∑ j = 0 w C w j × C n k − w i k + r − w + j = ∑ j = 0 w C w j ∑ i = 0 ∞ C n k − w i k + r − w + j 令  w = k ∑ j = 0 k C k j ∑ i = 0 ∞ C ( n − 1 ) k i k + r − k + j 令  f ( n , r ) = ∑ i = 0 ∞ C n k i k + r f ( n , r ) = ∑ j = 0 k C k j f ( n − 1 , r − k + j ) 接着我们再来分析 n = 1 的情况 f ( n , r ) = ∑ j = 0 k C k j f ( n − 1 , ( r + j ) % k ) f ( 1 , r ) = ( r = = 0 ? 2 : C k r ) \begin{array}{c}\sum_{i=0}^{\infty} C_{n k}^{i k+r} \\=\sum_{i=0}^{\infty} \sum_{j=0}^{w} C_{w}^{j} \times C_{n k-w}^{i k+r-w+j} \\=\sum_{j=0}^{w} C_{w}^{j} \sum_{i=0}^{\infty} C_{n k-w}^{i k+r-w+j} \\\text { 令 } w=k \\\sum_{j=0}^{k} C_{k}^{j} \sum_{i=0}^{\infty} C_{(n-1) k}^{i k+r-k+j} \\\text { 令 } f(n, r)=\sum_{i=0}^{\infty} C_{n k}^{i k+r} \\f(n, r)=\sum_{j=0}^{k} C_{k}^{j} f(n-1, r-k+j)\\\text {接着我们再来分析}n=1\text {的情况}\\f(n, r)=\sum_{j=0}^{k} C_{k}^{j} f(n-1,(r+j) \% k) \\f(1, r)=\left(r==0 ? 2: C_{k}^{r}\right)\end{array} i=0Cnkik+r=i=0j=0wCwj×Cnkwik+rw+j=j=0wCwji=0Cnkwik+rw+j  w=kj=0kCkji=0C(n1)kik+rk+j  f(n,r)=i=0Cnkik+rf(n,r)=j=0kCkjf(n1,rk+j)接着我们再来分析n=1的情况f(n,r)=j=0kCkjf(n1,(r+j)%k)f(1,r)=(r==0?2:Ckr)
那么这道题目就水落石出了,先用杨辉三角预处理一遍,预处理一遍组合数,在去推 f f f 数组就好了。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,p,k,r,C[105][105];
int f[1005][1005];
int zuhe(int n,int r)
{if(n==1)return r==0?2:C[k][r];if(f[n][r])return f[n][r];int sum=0;for(int i=0;i<=k;i++)sum+=(LL)C[k][i]*zuhe(n-1,(r+i)%k)%p,sum%=p;return f[n][r]=sum%p;
}
int main()
{scanf("%d%d%d%d",&n,&p,&k,&r);for(int i=0;i<=k;i++)//杨辉三角预处理{C[i][0]=1;for(int j=1;j<=i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%p;}printf("%d\n",zuhe(n,r));return 0;
}

但是,你会发现这个代码 RE 了。所以我们需要使用一下矩阵快速幂优化,我就不多说了,上代码。

#include<bits/stdc++.h>
using namespace std;
int P,K,R;
long long N;
struct matrix
{int n,m,a[51][51];matrix(){memset(a,0,sizeof(a));}matrix operator * (const matrix &c)const{matrix res;res.n=n;res.m=c.m;for(int i=0;i<n;i++)for(int j=0;j<c.m;j++)for(int k=0;k<m;k++)res.a[i][j]=(res.a[i][j]+1LL*a[i][k]*c.a[k][j]%P)%P;return res;}
}a,b;
void Pow(matrix x,long long y)
{while(y){if(y&1)a=a*x;x=x*x;y>>=1;}
}
int main()
{cin>>N;scanf("%d%d%d",&P,&K,&R);N=1LL*N*K;a.n=1;a.m=K;a.a[0][0]=1;b.n=b.m=K;for(int i=0;i<K;i++){b.a[i][i]++;b.a[i][(i+1)%K]++;}Pow(b,N);printf("%d",a.a[0][R]);return 0;
}

http://www.ppmy.cn/embedded/85651.html

相关文章

视觉SLAM--回环检测

文章目录 创建字典相似度计算增加字典规模 回环检测的意义&#xff1a;可以使 后端位姿图得到一个 全局一致估计。 视觉SLAM的主流做法&#xff1a; 基于外观的回环检测方法&#xff0c;仅 根据两幅图像的相似性确定回环检测关系。这种方法&#xff0c;摆脱了累计误差&…

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中&#xff0c;Fragments 是一种轻量级的 UI 组件&#xff0c;类似于视图&#xff08;Views&#xff09;&#xff0c;但它们没有自己的控制器&#xff08;Controller&#xff09;。Fragments 通常用于定义可以在多个视图中重用的 UI 片段&#xff0c;从而提…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名&#xff08;参数&#xff09; 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

VScode 修改 Markdown Preview Enhanced 字体以及大纲编号

修改字体和背景颜色 按快捷键 Ctrl , 打开设置&#xff0c;搜索 markdown-preview-enhanced.previewTheme&#xff0c;选择一个黑色主题的css&#xff0c;如 github-dark.css. 修改自动编号和背景颜色 背景颜色 按 F1 或者 Ctrl Shift P&#xff0c;输入 Customize CSS…

基于 HTML+ECharts 实现智慧销售数据可视化大屏(含源码)

智慧销售数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 在当今的商业环境中&#xff0c;销售数据的实时监控和分析对于企业的成功至关重要。通过数据可视化&#xff0c;销售团队可以更直观地理解销售趋势、客户行为和产品表现。本文将介绍如何利用 HTML 和 ECharts 实…

20240723opencv中的透视变换

文章目录 1.实验环境2.实验目的3.实验代码4.实验结果展示5.本实验拓展1.实验环境 pycharm + opencv3.4.1 2.实验目的 针对图像中斜视现象,我们采用透视变换法进行矫正,代码如下,有更好的方法欢迎各位大佬评论区留言。 3.实验代码 # @File: 14.5透视变换.py # @Author: …

【漏洞复现】APP分发签名系统index-uplog.php存在任意文件上传漏洞

漏洞描述 APP分发签名系统index-uplog.php存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵…

利用crypto.subtle.generateKey()写公钥和私钥,并用exportKey将公私钥导出

crypto.subtle.generateKey 需要在支持 Web Crypto API 的环境中运行&#xff0c;比如现代浏览器&#xff0c;或在nodejs环境当中 密钥生成和导出操作是异步的&#xff0c;因此需要使用 async/await 或者 .then() 和 .catch() 来处理。 generateKey 函数的第三个参数是一个数组…