BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】
Description
Input
输入文件共一行,包含三个空格分开的整数n,a,b和m。
1≤n≤10000000,0≤a,b≤45,m<100000000
Output
输出文件共一行,为计算结果。
Sample Input
3 1 2 1009
Sample Output
10
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define N 200
int read(){
int ans=0,w=1;
char c=getchar();
while(c!='-'&&!isdigit(c))c=getchar();
if(c=='-')w=-1,c=getchar();
while(isdigit(c))ans=ans*10+c-'0',c=getchar();
return ans*w;
}
int n,a,b,Mod;
LL J[N],inv[N];
struct Matrix{
int n;LL a[N][N];
Matrix(int n):n(n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;
}
Matrix operator * (const Matrix &c)const{
Matrix ans=Matrix(n);
for(int i=0;i<n;i++)
for(int k=0;k<n;k++)if(a[i][k])
for(int j=0;j<n;j++)if(c.a[k][j])
ans.a[i][j]=(ans.a[i][j]+a[i][k]*c.a[k][j])%Mod;
return ans;
}
Matrix operator ^ (const int x)const{
Matrix a=*this,ans=Matrix(n);
for(int i=0;i<n;i++)ans.a[i][i]=1;
int b=x;
while(b){
if(b&1)ans=ans*a;
b>>=1;
a=a*a;
}
return ans;
}
};
LL C(int n,int m){
if(n<m)return 0;
return J[n]*inv[m]%Mod*inv[n-m]%Mod;
}
LL fast_pow(LL a,LL b){
LL ans=1;
while(b){
if(b&1)ans=ans*a%Mod;
b>>=1;
a=a*a%Mod;
}
return ans;
}
int main(){
n=read();a=read();b=read();Mod=read();
int MAX=a+b+1;
J[0]=1;
for(int i=1;i<=MAX;i++)J[i]=J[i-1]*i%Mod;
inv[MAX]=fast_pow(J[MAX],Mod-2);
for(int i=MAX-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)%Mod;
Matrix move=Matrix(MAX*2);
for(int i=0;i<MAX;i++)move.a[i][i+MAX]=1;
for(int i=0;i<MAX;i++)
for(int j=0;j<=i;j++)
move.a[j][i]=move.a[j+MAX][i]=C(i,j);
move=move^n;
LL x=1,ans=0;
for(int i=0;i<=b;i++,x=x*n%Mod)
ans=(ans+C(b,i)*x%Mod*(move.a[0][a+b-i]+move.a[0][a+b-i+MAX])%Mod*(((b-i)&1)?(-1):(1)))%Mod;
printf("%lld",(ans+Mod)%Mod);
return 0;
}
多谢lyw大神指点→→ lyw大神
BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*的更多相关文章
- [CQOI2018]交错序列 (矩阵快速幂,数论)
[CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构 ...
- CF954F Runner's Problem(DP+矩阵快速幂优化)
这题是一年前某场我参加过的Education Round codeforces的F题,当时我显然是不会的. 现在看看感觉应该是能做出的. 不扯了写题解: 考虑朴素的DP,在不存在障碍的情况下:f[i] ...
- [BZOJ5298][CQOI2018]交错序列(DP+矩阵乘法)
https://blog.csdn.net/dream_maker_yk/article/details/80377490 斯特林数有时并没有用. #include<cstdio> #in ...
- POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...
- 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)
传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)
传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...
- 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)
传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...
随机推荐
- .net知识点汇总
死锁的必要条件?怎么克服? 答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用 ...
- Excel转化成DataTable实现:NPOI和OLEDb
使用两种方式实现的excel数据转化成DataSet,再结合前一篇的DataTable转化为实体,就可以解决excel到实体之间的转化. 代码如下: 首先定义一个接口: public interfac ...
- Warsaw U Contest Petrozavo dsk Summer 2011 Training Camp, Monday, September 5, 2011
Warsaw U Contest Petrozavo dsk Summer 2011 Training Camp, Monday, September 5, 2011 Problem A.Chocol ...
- (转)全面认识一下.NET 4的缓存功能
很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定是不会被忽略的一个重要亮点.在很多文档中都会介绍到在.NET 4.0中,缓存功能的增强主要是在扩展性方面做了改进,改变了原来只能利用内存进行缓存 ...
- LeetCode 275. H-Index II
275. H-Index II Add to List Description Submission Solutions Total Accepted: 42241 Total Submissions ...
- [MyEclipse]转:设置注释格式
Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit ...
- POJ 1160 经典区间dp/四边形优化
链接http://poj.org/problem?id=1160 很好的一个题,涉及到了以前老师说过的一个题目,可惜没往那上面想. 题意,给出N个城镇的地址,他们在一条直线上,现在要选择P个城镇建立邮 ...
- tensorflow入门(二)
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt #使用numpy生成200个随机点 x_data ...
- Highcharts 散点图
Highcharts 散点图 配置 chart 配置 配置 chart 的 type 为 'scatter' .chart.type 描述了图表类型.默认值为 "line". ch ...
- Esper——内存计算、事件驱动、SQL支持
教程简介Esper是一个事件流处理(ESP)和事件关联引擎(CEP的,复杂事件处理).Esper的目标是针对实时事件驱动架构(EDA).当Esper监测到事件流中又符合条件的时间发生时,即可触发Pla ...