Not Another Linear Algebra Problem 题解
题意:自己看。
首先我们知道我们唯一能找到的题解在 hos_lyric 的代码里。把它放在这里:(由 bikuhiku 提供)
然后对着这个东西一句一句翻译即可得到正解怎么写)
因为没有官方题解,来一发民间题解。当然写的可能不准,因为作者线代水平十分民科。
首先当然是观察这个形式。肯定要在所有
这个形式好膈应,翻转
这个形式看上去好多了。(感觉上是可以 q- 二项式反演的,但是我写了写没写出来)
考虑列出
容易发现上边的式子可以写成卷积形式:
我们需要计算
先看如何算一项
将这个代入
这个递推可以直接找
那么显然
这是钦定了
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int n,q,mod,ord,jc[10000010],inv[10000010],pw[10000010],cpw[10000010],a[10000010],jcp[10000010],invp[10000010];
int C(int n,int m){
int rn=n%ord,rm=m%ord;
n/=ord;m/=ord;
if(n<m||rn<rm)return 0;
return 1ll*jc[n]*inv[m]%mod*inv[n-m]%mod*jcp[rn]%mod*invp[rm]%mod*invp[rn-rm]%mod;
}
int qpow(int a,int b,int mod){
int ans=1;
while(b){
if(b&1)ans=1ll*ans*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return ans;
}
struct node{
int sq=1<<16,pw[1<<17],gpw[1<<17];
node(){
pw[0]=gpw[0]=1;
for(int i=1;i<sq;i++){
pw[i]=3ll*pw[i-1]%mod;
}
gpw[1]=3ll*pw[sq-1]%mod;
for(int i=2;i<sq;i++)gpw[i]=1ll*gpw[i-1]*gpw[1]%mod;
}
int get(int n){
return 1ll*gpw[n/sq]*pw[n%sq]%mod;
}
};
int main(){
scanf("%d%d%d",&n,&q,&mod);jc[0]=inv[0]=inv[1]=1;
node P;
for(int i=2;i<=n;i++)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=1;i<=n;i++)jc[i]=1ll*jc[i-1]*i%mod,inv[i]=1ll*inv[i-1]*inv[i]%mod;
pw[0]=cpw[0]=1;pw[1]=q;
for(int i=1;i<=n;i++)pw[i]=1ll*pw[i-1]*pw[1]%mod,cpw[i]=1ll*cpw[i-1]*pw[i-1]%mod;
ord=n+1;
for(int i=1;i<=n;i++)if(pw[i]==1){
ord=i;break;
}
jcp[0]=invp[0]=1;
for(int i=1;i<=n;i++)jcp[i]=1ll*jcp[i-1]*(1-pw[i]+mod)%mod;
invp[n]=qpow(jcp[n],mod-2,mod);
for(int i=n-1;i>=1;i--)invp[i]=1ll*invp[i+1]*(1-pw[i+1]+mod)%mod;
a[0]=1;int invpw=qpow(q,mod-2,mod);
for(int i=1,Inv=1;i<=n;i++){
Inv=1ll*Inv*invpw%mod;
a[i]=1ll*(1ll*((i&1)?(mod-1):1)*cpw[i]+1ll*(pw[i-1]-pw[n]+mod)%mod*(1-pw[i]+mod)%mod*a[i-1])%mod*Inv%mod;
}
for(int i=0;i<=n;i++)a[i]=1ll*a[i]*C(n,i)%mod;
int ans=0,ret=qpow(q,n,mod-1);
if(!ret)ret=mod-1;
for(int i=0,tmp=1;i<=n;i++){
ans=(ans+1ll*P.get(tmp)*a[n-i])%mod;
tmp=1ll*tmp*ret%(mod-1);
}
printf("%d\n",ans);
return 0;
}
快踩
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)