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个 ...
随机推荐
- 远程线程注入shellcode笔记
#include "stdafx.h" #include <windows.h> #include <stdio.h> char shellcode[] = ...
- python2.7.10 VS2015编译方法
打开 Python-2.7.10\PCbuild目录 然后设置只编译python和pythoncore: 好了,编译试一试. 出现了好几个错误.由于 VS2015 取消了 timezone 的定义,改 ...
- 手把手教你整合 SpringMvc+Spring+MyBatis+Maven
注:该教程是参考孙宇老师的<SpringMvc+Spring+Mybatis+Maven整合视频教程1>整理的,花了我六个多小时,边复习视频边调代码边写教程,保证该教程每一步都能正确执行, ...
- Linux下部署 jar包
1.windows和linux执行jar命令是一样的,java -jar xxx.jar 2.使用nohup命令将jar程序设置成后台运行,运行日志输出到nohup.out,关闭窗口无影响 nohup ...
- IntelliJ IDEA 2017 主题安装及配置
主题哪里下的? 网站:http://www.riaway.com/ 主题怎么安装? 然后选择文件,找到下载的主题,按步骤,重启之后即可使用: 主题如何配置? 以下所有配置基于 IntelliJ IDE ...
- unity屏幕坐标转世界坐标结果为(0,0,0)
代码: wv转出来一直为(0,0,0),卡了好久,问别人说要转化的屏幕坐标Z不能为0 阿西吧!特此记录
- mvc 获取 HtmlHelper 表达式值
public static MvcHtmlString Try<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, ...
- hduacm集训单人排位赛1002
自适应simpson积分公式 通过二分区间递归求simpson积分 #include<map> #include<set> #include<cmath> #inc ...
- yii控制布局方式
1:在控制器内成员变量设置 public $layout = false; //不使用布局 public $layout = “main”; //设置使用的布局文件 2:在控制器成员方法内设置 $th ...
- Symmetrical Network Acceleration with EBS 12
Andy Tremayne, my esteemed colleague and fellow blogger, has published a new whitepaper that discuss ...