P8110
题目大意
给定一个长度为数列
设一个矩阵
思路分析
我会暴力
我会矩阵快速幂优化!
理论上讲矩阵快速幂是可以通过前两个子任务的,然而由于本人实力有限,经过不断调试还是没能达到预期。
注意到由于
首先可以发现
矩阵乘法虽然没有交换律但是有结合律,所以
接下来我们需要处理刚才忽略的首项和尾项,由于中间
综上,我们只需要统计
const int N = 1e5 + 10;
const int mod = 998244353;
int quickpower(int a,int b){
int ans=1,base=a;
while(b){
if(b&1){
ans*=base;
ans%=mod;
}
base*=base;
base%=mod;
b>>=1;
}
return ans;
}
int a[N],b[N];
int ans1 , ans2 ,ans3,ans;
signed main(){
int n = read() , k = read();
for(int i=1;i<=n;i++){
a[i] = read();
ans1 += a[i];
ans1 %= mod;
}
for(int i=1;i<=n;i++){
b[i] = read();
ans2 += b[i];
ans2 %= mod;
}
if(k == 0){
cout<<n<<endl;
return 0;
}
for(int i=1;i<=n;i++){
ans3 += a[i] * b[i] % mod;
ans3 %= mod;
}
ans3 = quickpower(ans3,k-1);
cout<<(ans1 % mod * ans2 % mod * ans3 % mod + mod) % mod<<endl;
return 0;
}