洛谷P8110题解
本文同步更新于洛谷博客
题目描述
给定两个长度为 的序列 与一个整数 。
设矩阵 满足 ,求 的所有元素的和在模 意义下的结果。
题解
( 的时直接输出 ,下面只讨论 的情况)
比赛的时候打了个暴力把 和 都求出来了,观察发现答案为 ,现在用数学归纳法来证明一下。
设 为矩阵 , 为矩阵 。
当 时,由矩阵乘法的定义可算出矩阵 ,不难发现和为 。
不妨假设 时,,
则 时,如下图可得 ,则 ,证毕。
最后用快速幂求解即可。
注意
和 中可能会有负数,注意取模。
Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll p=998244353;
const int maxn=1e5+5;
int n;
ll k,a[maxn],b[maxn],x,y,s;
ll quickpow(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1)
res=res*a%p;
b>>=1;
a=a*a%p;
}
return res;
}
int main()
{
scanf("%d%lld",&n,&k);
if(!k)
{
printf("%d\n",n);
return 0;
}
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
x=(x+a[i])%p;
}
for(int i=1;i<=n;i++)
{
scanf("%lld",&b[i]);
y=(y+b[i])%p;
}
for(int i=1;i<=n;i++)
s=(s+a[i]*b[i]%p)%p;
printf("%lld\n",(x*y%p*quickpow(s,k-1)%p+p)%p);
return 0;
}
本文作者:Ginger_he
本文链接:https://www.cnblogs.com/Gingerhe/p/15864536.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步