[HNOI2019]白兔之舞(矩阵快速幂+单位根反演)
非常抱歉,这篇文章鸽了。真的没时间写了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define cp complex<long double>
#define pi acosl(-1)
const int N=6e5+;
struct mat{ll a[][];}A1,A2;
ll n,k,l,X,Y,mod,w,nn,ans[N],a1[N],a2[N],R[N];
cp A[N],B[N],C[N],D[N],E[N],F[N],G[N];
ll qpow(ll a,ll b)
{
ll ret=;
while(b)
{
if(b&)ret=ret*a%mod;
a=a*a%mod,b>>=;
}
return ret;
}
mat operator*(mat a,mat b)
{
mat c;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
c.a[i][j]=;
for(int k=;k<=n;k++)c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
}
return c;
}
mat qpow(mat a,ll b)
{
mat ret={};
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i==j)ret.a[i][j]=;
while(b)
{
if(b&)ret=ret*a;
a=a*a,b>>=;
}
return ret;
}
ll getrt(ll x)
{
vector<int>vec;vec.clear();
for(ll i=;i*i<=(x-);i++)if((x-)%i==)vec.push_back(i),vec.push_back((x-)/i);
for(ll i=;;i++)
{
bool c=;
for(unsigned j=;j<vec.size()&&c;j++)if(qpow(i,vec[j])==)c=;
if(c)return i;
}
}
ll c1(ll x){return x*(x-)/;}
void FFT(cp*a,int f)
{
for(int i=;i<nn;i++)if(i<R[i])swap(a[i],a[R[i]]);
for(int i=;i<nn;i*=)
{
cp wn(cosl(pi/i),sinl(pi/i));
for(int j=;j<nn;j+=i*)
{
cp w(,),x,y;
for(int k=;k<i;k++,w=w*wn)
x=a[j+k],y=a[j+k+i]*w,a[j+k]=x+y,a[j+k+i]=x-y;
}
}
if(f==)return;
reverse(a+,a+nn);
for(int i=;i<nn;i++)a[i]/=nn;
}
int main()
{
cin>>n>>k>>l>>X>>Y>>mod;
for(int i=;i<=n;i++)for(int j=;j<=n;j++)cin>>A1.a[i][j];
w=qpow(getrt(mod),(mod-)/k);
for(int j=;j<k;j++)
{
for(int i=;i<=n;i++)
for(int p=;p<=n;p++)
{
A2.a[i][p]=A1.a[i][p]*qpow(w,j)%mod;
if(i==p)A2.a[i][p]++;
}
A2=qpow(A2,l),a2[j]=A2.a[X][Y];
}
for(int j=;j<k;j++)a2[j]=a2[j]*qpow(w,c1(j))%mod;
for(int j=;j<=k*;j++)a1[j]=qpow(w,c1(j)*(mod-));
reverse(a1,a1+k*+);
int m=k*,L=;
for(int i=;i<m;i++)A[i]=a2[i]/,B[i]=a2[i]%;
for(int i=;i<m;i++)C[i]=a1[i]/,D[i]=a1[i]%;
for(nn=;nn<=m;nn<<=)L++;
for(int i=;i<nn;i++)R[i]=(R[i>>]>>)|((i&)<<L-);
FFT(A,),FFT(B,),FFT(C,),FFT(D,);
for(int i=;i<nn;i++)E[i]=A[i]*C[i],F[i]=A[i]*D[i]+B[i]*C[i],G[i]=B[i]*D[i];
FFT(E,-),FFT(F,-),FFT(G,-);
for(int i=;i<nn;i++)
ans[i]=((ll)(G[i].real()+0.5)+(((ll)(F[i].real()+0.5)%mod)<<)+((ll)(E[i].real()+0.5)%mod<<))%mod;
for(ll i=;i<k;i++)
{
ans[k*-i]=(ans[k*-i]*qpow(k,mod-)%mod)*qpow(w,c1(i))%mod;
printf("%lld\n",ans[k*-i]);
}
}
[HNOI2019]白兔之舞(矩阵快速幂+单位根反演)的更多相关文章
- 【BZOJ3328】PYXFIB(单位根反演,矩阵快速幂)
[BZOJ3328]PYXFIB(单位根反演,矩阵快速幂) 题面 BZOJ 题解 首先要求的式子是:\(\displaystyle \sum_{i=0}^n [k|i]{n\choose i}f_i\ ...
- HNOI2019 白兔之舞 dance
HNOI2019 白兔之舞 dance 显然\(n=3\)就是\(n=1\)的扩展版本,先来看看\(n=1\)怎么做. 令\(W=w[1][1]\),显然答案是:\(ans_t=\sum_{i\mod ...
- luogu P5293 [HNOI2019]白兔之舞
传送门 关于这题答案,因为在所有行,往后跳到任意一行的\(w_{i,j}\)都是一样的,所以可以算出跳\(x\)步的答案然后乘上\(\binom{l}{x}\),也就是枚举跳到了哪些行 如果记跳x步的 ...
- 【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂
题目大意 本题的满二叉树定义为:不存在只有一个儿子的节点的二叉树. 定义一棵满二叉树\(A\)包含满二叉树\(B\)当且经当\(A\)可以通过下列三种操作变成\(B\): 把一个节点的两个儿子同时删掉 ...
- 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...
- 51nod 1113 矩阵快速幂
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- HDU5950(矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...
随机推荐
- ACM-售货员难题
题目描述:售货员的难题 某乡有n个村庄(1< n < 20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0 < s < 1000)是已知的,且A村到B村与B村到 ...
- Mysql安装维护笔记一
1.Centos7安装mysql rpm安装PHP7相应的yum源 $wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11. ...
- Web基础之Servlet
Servlet Servlet : server applet,直译服务小程序.那Servlet到底是什么呢? Servlet说白了其实就是一个接口,接口的作用是什么?规范呗,这个接口规定了下面三个问 ...
- 新部署到服务器 报 The requested URL /home/profession was not found on this server. 错误
The requested URL /home/profession was not found on this server. 通过xxx.com, 首页可以正常访问,xxx.com/xx/xx 就 ...
- Java compare方法和compareTo方法
Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...
- POJ 1050:To the Max
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43241 Accepted: 22934 Desc ...
- 用Python复制文件的9个方法(转)
转自:https://zhuanlan.zhihu.com/p/35725217 用Python复制文件的9个方法 Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 sh ...
- html通配符
♠ ♠ ♠ 黑桃 ♣ ♣ ♣ 梅花 ♥ ♥ ♥ 红桃,心 ♦ ♦ ♦ 方块牌 ◊ ◊ ◊ 菱形 † † † 匕首 ‡ ‡ ‡ 双剑号 ¡ ¡ ¡ 反向感叹号 ¿ ¿ ¿ 反向问号 ← ← ← 左箭头 ...
- # vim ~/.vimrc vim配色
Ubuntu # vim ~/.vimrc # /hom/zzx 下 set nomodeline "(这个一定要写,目前有这个安全漏洞) set ...
- BZOJ 3442 学习小组
题解: 神建图 普通的二分图费用流建完后 添加学生x->t 容量为k-1的边 表示尽量让x参加一个活动,剩下的k-1次机会可以不参加 #include<iostream> #incl ...